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 orienta você sobre como chamar serviços de Azure de seu agente. Para autenticar em serviços Azure, como Armazenamento do Azure ou Azure Key Vault usando identidades de agente, use a classe MicrosoftIdentityTokenCredential de Microsoft. Identity.Web. Azure. A classe MicrosoftIdentityTokenCredential implementa a interface TokenCredential do SDK do Azure, permitindo uma integração sem interrupções entre Microsoft.Identity.Web e clientes do SDK do Azure.
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 do agente Microsoft Entra para o ID do agente.
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 em nome.
- A conta de usuário de um agente com permissões apropriadas para chamar a API de destino.
Passos de implementação
Instale o pacote de integração Azure e o Microsoft. Identity.Web.AgentIdentities pacote para adicionar suporte para identidades de agente.
dotnet add package Microsoft.Identity.Web.Azure dotnet add package Microsoft.Identity.Web.AgentIdentitiesInstale o pacote SDK do Azure que você deseja usar, por exemplo, Armazenamento do Azure:
dotnet add package Azure.Storage.BlobsConfigure seus serviços para adicionar suporte a credenciais de token do Azure:
using Microsoft.Identity.Web; var builder = WebApplication.CreateBuilder(args); // Add authentication builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); // Add Azure token credential support builder.Services.AddMicrosoftIdentityAzureTokenCredential(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();Configure as opções de credenciais de token do Azure em 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>", "ClientId": "<agent-blueprint-id>", // Other client creedentials available. See <https://aka.ms/ms-id-web/client-credentials> "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "your-client-secret" } ] } }Adquira uma credencial de token do provedor de serviços e use-a com SDK do Azure clientes.
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 delegados em nome do usuário, não defina a propriedadeRequestAppTokenou defina-a explicitamente comofalse.using Microsoft.Identity.Web; public class AgentService { private readonly MicrosoftIdentityTokenCredential _credential; public AgentService(MicrosoftIdentityTokenCredential credential) { _credential = credential; } // Call Azure service with the agent identity for app only scenario public async Task<List<string>> ListBlobsForAgentAsync(string agentIdentity) { // Configure for agent identity string agentIdentity = "agent-identity-guid"; _credential.Options.WithAgentIdentity(agentIdentity); _credential.Options.RequestAppToken = true; var blobClient = new BlobServiceClient( new Uri("https://myaccount.blob.core.windows.net"), _credential); var container = blobClient.GetBlobContainerClient("agent-data"); var blobs = new List<string>(); await foreach (var blob in container.GetBlobsAsync()) { blobs.Add(blob.Name); } return blobs; } // Call Azure service with the agent identity for on-behalf of user scenario public async Task<List<string>> ListBlobsForAgentAsync(string agentIdentity) { // Configure for agent identity var blobClient = new BlobServiceClient( new Uri("https://myaccount.blob.core.windows.net")); var container = blobClient.GetBlobContainerClient("agent-data"); var blobs = new List<string>(); await foreach (var blob in container.GetBlobsAsync()) { blobs.Add(blob.Name); } return blobs; } }Você também pode adquirir um token para a conta de usuário de um agente. Para fazer isso, você pode usar o UPN (User Principal Name - Nome da Entidade de Usuário) ou a OID (Object Identity - Identidade do Objeto) para identificar a conta de usuário do agente.
Para ID do objeto:
using Microsoft.Identity.Web; public class AgentService { private readonly MicrosoftIdentityTokenCredential _credential; public AgentService(MicrosoftIdentityTokenCredential credential) { _credential = credential; } // Use object ID to identify the agent's user account public async Task<List<string>> ListBlobsForAgentAsync(string agentIdentity) { // Configure for agent identity string agentIdentity = "agent-identity-guid"; string userOid = "user-object-id"; _credential.Options.WithAgentUserIdentity(agentIdentity, userOid); var blobClient = new BlobServiceClient( new Uri("https://myaccount.blob.core.windows.net"), _credential); var container = blobClient.GetBlobContainerClient("agent-data"); var blobs = new List<string>(); await foreach (var blob in container.GetBlobsAsync()) { blobs.Add(blob.Name); } return blobs; } // Use UPN to identify the agent's user account\ public async Task<List<string>> ListBlobsForAgentAsync(string agentIdentity) { // Configure for agent identity string agentIdentity = "agent-identity-guid"; string userUpn = "user@contoso.com"; _credential.Options.WithAgentUserIdentity(agentIdentity, userUpn); var blobClient = new BlobServiceClient( new Uri("https://myaccount.blob.core.windows.net"), _credential); var container = blobClient.GetBlobContainerClient("agent-data"); var blobs = new List<string>(); await foreach (var blob in container.GetBlobsAsync()) { blobs.Add(blob.Name); } return blobs; } }