Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como chamar uma Microsoft API do Graph a partir de um agente usando identidades de agentes ou a conta de usuário de um agente.
Para chamar uma API de um agente, você precisa obter um token de acesso que o agente pode usar para se autenticar na API. É recomendável usar o SDK Microsoft.Identity.Web para .NET para chamar suas APIs web. Esse SDK simplifica o processo de aquisição e validação de tokens. Para outros idiomas, use o SDK de Autenticação Microsoft Entra ID (sidecar).
Pré-requisitos
- Uma identidade de agente com permissões apropriadas para chamar a API de destino. Você precisa de um usuário para o fluxo on-behalf-of.
- A conta de usuário de um agente com permissões apropriadas para chamar a API de destino.
Chamar uma API do Microsoft Graph
Instale o Microsoft. Identity.Web.GraphServiceClient que manipula a autenticação para o SDK do Graph e o Microsoft. Identity.Web.AgentIdentities pacote para adicionar suporte para identidades de agente.
dotnet add package Microsoft.Identity.Web.GraphServiceClient dotnet add package Microsoft.Identity.Web.AgentIdentitiesAdicione o suporte para Microsoft Graph e identidades de agente em sua coleção de serviços.
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.Identity.Web; var builder = WebApplication.CreateBuilder(args); // Add authentication (web app or web API) builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); // Add Microsoft Graph support builder.Services.AddMicrosoftGraph(); // Add Agent Identities support builder.Services.AddAgentIdentities(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.Run();Configurar as opções de identidade do Graph e do agente no appsettings.json.
Aviso
Segredos do cliente não devem ser usados como credenciais de cliente em ambientes de produção para esquemas de identidade de agente devido a riscos de segurança. Em vez disso, use métodos de autenticação mais seguros, como fic (credenciais de identidade federadas) com identidades gerenciadas ou certificados de cliente. Esses métodos fornecem segurança aprimorada eliminando a necessidade de armazenar segredos confidenciais diretamente na configuração do aplicativo.
{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "<your-tenant-id>", "ClientId": "<agent-blueprint-client-id>", "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "your-client-secret" } ] }, "DownstreamApis": { "MicrosoftGraph": { "BaseUrl": "https://graph.microsoft.com/v1.0", "Scopes": ["User.Read", "User.ReadBasic.All"] } } }Note
Configure apenas as permissões do Microsoft Graph de que seu agente precisa e verifique se as
Scopesque você define correspondem aos recursos do Graph que seu código acessa. Esses exemplos usamUser.ReadeUser.ReadBasic.All; chamar outros recursos requer suas permissões correspondentes.Agora você pode obter o
GraphServiceClientinjetando-o em seu serviço ou no provedor de serviços e chamar o Microsoft Graph.
Para identidades de agente, você pode adquirir um token apenas de aplicativo (agentes autônomos) ou um token em nome de usuário (agentes interativos) usando o método
WithAgentIdentity. Para tokens somente de aplicativo, defina aRequestAppTokenpropriedade comotrue. Para tokens on-behalf-of delegados do usuário, não defina a propriedadeRequestAppTokenou defina-a explicitamente comofalse.using Microsoft.Graph; using Microsoft.Identity.Web; // Get the GraphServiceClient GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>(); string agentIdentity = "agent-identity-guid"; // Call Microsoft Graph APIs with the agent identity for app only scenario var usersAppOnly = await graphServiceClient.Users .GetAsync(r => r.Options.WithAuthenticationOptions(options => { options.WithAgentIdentity(agentIdentity); options.RequestAppToken = true; // Set to true for app only })); // Call Microsoft Graph APIs with the agent identity for on-behalf of user scenario var usersOnBehalfOfUser = await graphServiceClient.Users .GetAsync(r => r.Options.WithAuthenticationOptions(options => { options.WithAgentIdentity(agentIdentity); options.RequestAppToken = false; // False to show it's on-behalf of user }));Para as identidades da conta de usuário do agente, você pode especificar o User Principal Name (UPN) ou a Object Identity (OID) para identificar a conta de usuário do agente usando o método
WithAgentUserIdentity.using Microsoft.Graph; using Microsoft.Identity.Web; // Get the GraphServiceClient GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>(); string agentIdentity = "agent-identity-guid"; // Call Microsoft Graph APIs with the agent's user account identity using UPN string userUpn = "user-upn"; var me = await graphServiceClient.Me .GetAsync(r => r.Options.WithAuthenticationOptions(options => options.WithAgentUserIdentity(agentIdentity, userUpn))); // Or using OID string userOid = "user-object-id"; var meByOid = await graphServiceClient.Me .GetAsync(r => r.Options.WithAuthenticationOptions(options => options.WithAgentUserIdentity(agentIdentity, userOid)));