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.
Agentes interativos tomam ações em nome dos usuários. Para agir em nome dos usuários com segurança, o agente autentica o usuário, obtém consentimento para as permissões necessárias e adquire tokens de acesso para APIs downstream. Este artigo orienta você pelo fluxo de autenticação de ponta a ponta e aquisição de token para seu agente interativo:
- Conceda permissões por meio de permissões herdáveis ou consentimento.
- Autentique o usuário e obtenha um token de acesso.
- Valide o token e extraia declarações de usuário.
- Adquira tokens para APIs de downstream usando o fluxo On-Behalf-Of (OBO).
Observação
Este artigo aborda agentes interativos que atuam em nome de usuários conectados usando o fluxo OBO. Se o agente precisar de sua própria identidade semelhante ao usuário (um cenário de trabalho digital), consulte as contas de usuário do Agente e o fluxo OAuth da conta de usuário do Agente.
Pré-requisitos
Antes de começar, verifique se você tem:
- Um blueprint de identidade do agente. Registre o ID do aplicativo de blueprint de identidade do agente (ID do cliente).
- Uma identidade de agente.
- Um aplicativo cliente registrado em Microsoft Entra para lidar com a autenticação do usuário.
- Familiaridade com o fluxo de código de autorização do OAuth 2.0.
- A capacidade de executar uma API web ASP.NET Core, caso você planeje usar os exemplos de validação de token e OBO neste artigo.
Para autorização de administrador, você também precisa:
- Acesso do administrador para conceder consentimento para permissões de aplicativo.
Permissões e consentimento
Antes que o agente possa agir em nome de um usuário, o usuário ou um administrador deve consentir com as permissões necessárias. Há duas abordagens para conceder permissões:
- Permissões herdáveis: pré-autenticar permissões no blueprint para que as identidades do agente as herdem automaticamente.
- Solicitar consentimento: registre um URI de redirecionamento e solicite aos usuários ou administradores que concedam consentimento por meio de uma solicitação OAuth ou usem o ponto de extremidade de consentimento do administrador.
Usar permissões herdáveis
Configure permissões herdáveis no blueprint de identidade do agente para pré-autorizar um conjunto base de escopos delegados e funções de aplicativo. As identidades do agente criadas a partir do blueprint herdam automaticamente essas permissões sem avisos de consentimento interativos. Para obter mais informações, consulte Configurar permissões herdáveis para blueprints de identidade do agente.
Solicitar consentimento
Para solicitar consentimento usando um fluxo OAuth, o blueprint de identidade do agente deve primeiro ser configurado com um URI de redirecionamento. Para modelos, o URI de redirecionamento deve ser do tipo aplicativo da Web. Diferente de URIs de redirecionamento em registros de aplicativos, um URI de redirecionamento em um blueprint não pode ser usado para obter tokens de permissões delegadas. Só response_type=none há suporte na solicitação OAuth2, o que significa que a solicitação registra apenas o consentimento e nenhum token é retornado.
Registrar um URI de redirecionamento
Para atualizar o URI de redirecionamento no blueprint de identidade do agente, primeiro você precisa obter um token de acesso com a permissão delegada AgentIdentityBlueprint.ReadWrite.All. Envie uma solicitação PATCH para o objeto de aplicativo para o blueprint de identidade do agente:
PATCH https://graph.microsoft.com/beta/applications/<agent-blueprint-id>
OData-Version: 4.0
Content-Type: application/json
Authorization: Bearer <token>
{
"web": {
"redirectUris": [
"https://myagentapp.com/authorize"
]
}
}
Solicitar consentimento do usuário
Antes que o agente possa agir em nome de um usuário, o usuário deve consentir com as permissões necessárias. A solicitação de consentimento do usuário não retorna um token. Em vez disso, ele registra que o usuário concedeu permissão ao agente para agir em seu nome. A aquisição de token acontece na Autenticação do usuário e solicita um token.
Importante
Use o ID de cliente de identidade do agente no parâmetro client_id, não o ID do blueprint de identidade do agente.
Para solicitar consentimento a um usuário, construa uma URL de autorização e redirecione o usuário para ela. O agente pode apresentar essa URL de maneiras diferentes, por exemplo, como um link em uma mensagem de chat.
https://login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?
client_id=<agent-identity-id>
&response_type=none
&redirect_uri=https%3A%2F%2Fmyagentapp.com%2Fauthorize
&response_mode=query
&scope=User.Read
&state=xyz123
Quando o usuário abre essa URL, Microsoft Entra ID solicita que ele entre e conceda consentimento. Após o consentimento, o usuário é enviado de volta para o URI de redirecionamento.
Os principais parâmetros na URL de autorização de consentimento do usuário são:
-
client_id: O ID do cliente da identidade do agente (não o ID do cliente do blueprint de identidade do agente). -
response_type: definido comononeporque essa solicitação registra apenas o consentimento. A aquisição de token usaresponse_type=codeem Autenticar o usuário e solicitar um token. -
redirect_uri: Deve corresponder exatamente ao URI de redirecionamento configurado no blueprint de identidade do agente. -
scope: especifique as permissões delegadas necessárias (por exemplo,User.Read). -
state: parâmetro opcional para manter o estado entre a solicitação e o retorno de chamada.
Para obter mais informações sobre os conceitos de autorização do OAuth, consulte Permissões e consentimento no plataforma de identidade da Microsoft.
Solicitar consentimento do administrador para todos os usuários
Os agentes também podem solicitar autorização de um administrador do Microsoft Entra ID, que pode conceder consentimento ao agente para todos os usuários em seu locatário. O consentimento do administrador pode ser necessário dependendo das configurações de consentimento configuradas no locatário.
Para conceder consentimento de administrador para todo o locatário, direcione um administrador para a URL a seguir. Use a ID de identidade do agente no client_id parâmetro.
https://login.microsoftonline.com/contoso.onmicrosoft.com/v2.0/adminconsent
?client_id=<agent-identity-id>
&scope=User.Read
&redirect_uri=<redirect-uri>
&state=xyz123
Depois que o administrador concede consentimento, as permissões se aplicam a todo o locatário. Os usuários não precisam consentir novamente.
Observação
Configure um URI de redirecionamento em seu blueprint e inclua um state parâmetro na solicitação de consentimento. Quando o consentimento é concedido, o usuário é enviado para o URI de redirecionamento, onde você pode exibir a confirmação. Seu endpoint pode usar o parâmetro state para rastrear que a permissão foi concedida. Para agentes de locatário único, você também pode repetir as solicitações de token até que o consentimento seja concedido porque a ID do locatário já é conhecida.
Autenticar o usuário e solicitar um token
Depois que o consentimento é concedido, a aplicação cliente (como uma aplicação de front-end ou um aplicativo móvel) inicia uma solicitação de autorização com código de autorização do OAuth 2.0 para obter um token cujo público-alvo é o blueprint de identidade do agente. Nesta etapa, client_id se refere à ID de aplicativo registrada do próprio aplicativo cliente, e não à identidade do agente ou à ID do blueprint de identidade do agente.
Observação
O redirect_uri nesta solicitação pertence ao registro do aplicativo cliente, não ao URI de redirecionamento do blueprint configurado na etapa anterior de consentimento.
Redirecione o usuário para o endpoint de autorização do Microsoft Entra ID com os seguintes parâmetros:
GET https://login.microsoftonline.com/<your-tenant-id>/oauth2/v2.0/authorize?client_id=<client-app-id> &response_type=code &redirect_uri=<redirect_uri> &response_mode=query &scope=api://<agent-blueprint-id>/access_agent &state=abc123Depois que o usuário entra, seu aplicativo recebe um código de autorização no URI de redirecionamento. Troque o código de autorização por um token de acesso:
POST https://login.microsoftonline.com/<your-tenant-id>/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id=<client-app-id> &grant_type=authorization_code &code=<authorization_code> &redirect_uri=<redirect_uri> &scope=api://<agent-blueprint-id>/access_agent &client_secret=<client-secret>Inclua o
client_secretparâmetro somente se estiver usando um cliente confidencial.A resposta JSON contém um token de acesso que pode ser usado para acessar a API do agente.
Validar o token de acesso
A API Web deve validar o token de acesso de entrada antes que o agente possa agir. Sempre use uma biblioteca aprovada para validar tokens. Não escreva seu próprio código de validação de token.
Instale o pacote NuGet
Microsoft.Identity.Web:dotnet add package Microsoft.Identity.WebEm seu projeto de API Web ASP.NET Core, implemente a autenticação Microsoft Entra ID:
// Program.cs using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.Identity.Web; var builder = WebApplication.CreateBuilder(args); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd")); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization();Configure as credenciais de autenticação no arquivo
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-id>", "Audience": "<agent-blueprint-id>", "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "your-client-secret" } ] }
Para obter mais informações sobre Microsoft. Identity.Web, consulte Microsoft. Documentação do Identity.Web.
Validar declarações de usuário
Após a validação do token de acesso, o agente pode identificar o usuário e executar verificações de autorização. A rota de API de exemplo a seguir extrai as declarações do usuário do token de acesso e as retorna na resposta da API:
app.MapGet("/hello-agent", (HttpContext httpContext) =>
{
var claims = httpContext.User.Claims.Select(c => new
{
Type = c.Type,
Value = c.Value
});
return Results.Ok(claims);
})
.RequireAuthorization();
Adquirir tokens para APIs de fluxo descendente
Depois que um agente interativo valida o token do usuário, ele pode solicitar tokens de acesso para chamar APIs downstream em nome do usuário. O fluxo OBO (On-Behalf-Of) permite que o agente:
- Receber um token de acesso de um cliente.
- Troque-o por um novo token de acesso para uma API downstream, como o Microsoft Graph.
- Use esse novo token para acessar recursos protegidos em nome do usuário original.
A biblioteca Microsoft.Identity.Web simplifica a implementação do OBO manipulando a troca de tokens automaticamente, para que você não precise implementar manualmente o fluxo seguindo o protocolo.
Instale os pacotes NuGet necessários:
dotnet add package Microsoft.Identity.Web dotnet add package Microsoft.Identity.Web.AgentIdentitiesEm seu projeto de API da Web no ASP.NET Core, implemente a atualização da autenticação Microsoft Entra ID:
// Program.cs using Microsoft.AspNetCore.Authorization; using Microsoft.Identity.Abstractions; using Microsoft.Identity.Web; using Microsoft.Identity.Web.Resource; using Microsoft.Identity.Web.TokenCacheProviders.InMemory; var builder = WebApplication.CreateBuilder(args); builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi(); builder.Services.AddAgentIdentities(); builder.Services.AddInMemoryTokenCaches(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.Run();Na API do agente, troque o token de acesso do usuário de entrada por um novo token de acesso para a identidade do agente.
Microsoft.Identity.Webvalida o token de acesso recebido e gerencia a troca de tokens em nome de terceiros:app.MapGet("/agent-obo-user", async (HttpContext httpContext) => { string agentIdentity = "<your-agent-identity>"; IAuthorizationHeaderProvider authorizationHeaderProvider = httpContext.RequestServices.GetService<IAuthorizationHeaderProvider>()!; AuthorizationHeaderProviderOptions options = new AuthorizationHeaderProviderOptions().WithAgentIdentity(agentIdentity); string authorizationHeaderWithUserToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(["https://graph.microsoft.com/.default"], options); var response = new { header = authorizationHeaderWithUserToken }; return Results.Json(response); }) .RequireAuthorization();
Nos bastidores, o fluxo OBO envolve duas trocas de tokens: primeiro, o blueprint de identidade do agente obtém um token de troca usando suas credenciais de cliente e, em seguida, o modelo de identidade do agente troca esse token juntamente com o token de acesso do usuário por um token de API subsequente. Para obter uma descrição completa do protocolo, incluindo formatos de requisição HTTP e detalhes de validação de token, consulte Fluxo On-Behalf-Of em agentes.
Conteúdo relacionado
Saiba mais sobre tokens de agente e APIs relacionadas:
- Referência de reivindicações de token
- Fluxo On-Behalf-Of em agentes
- Call Microsoft API do Graph
- Chamar APIs personalizadas
- Chamar serviços do Azure
- Usuários do agente
- Autenticar e adquirir tokens para agentes autônomos
- Permissões e consentimento no plataforma de identidade da Microsoft
- Plataforma de identidade da Microsoft e o fluxo On-Behalf-Of de OAuth 2.0