Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article vous guide sur la façon d’appeler Azure services à partir de votre agent. Pour vous authentifier auprès de services Azure tels que stockage Azure ou Azure Key Vault à l’aide d’identités d’agent, utilisez la classe MicrosoftIdentityTokenCredential à partir de Microsoft. Identity.Web. Azure. La classe MicrosoftIdentityTokenCredential implémente l'interface TokenCredential de Kit de développement logiciel (SDK) Azure, ce qui permet une intégration transparente entre Microsoft.Identity.Web et les clients Kit de développement logiciel (SDK) Azure.
Pour appeler une API à partir d’un agent, vous devez obtenir un jeton d’accès que l’agent peut utiliser pour s’authentifier auprès de l’API. Nous vous recommandons d’utiliser le Microsoft.Identity.Web SDK pour .NET pour appeler vos API web. Ce SDK simplifie le processus d’acquisition et de validation de jetons. Pour les autres langages de programmation, utilisez le SDK d’authentification Microsoft Entra ID (sidecar).
Prerequisites
- Identité d’agent disposant des autorisations appropriées pour appeler l’API cible. Vous avez besoin d’un utilisateur pour le flux de délégation de droits.
- Compte d’utilisateur d’un agent disposant des autorisations appropriées pour appeler l’API cible.
Étapes d’implémentation
Installez le package d’intégration Azure et le Microsoft. Package Identity.Web.AgentIdentities pour ajouter la prise en charge des identités d’agent.
dotnet add package Microsoft.Identity.Web.Azure dotnet add package Microsoft.Identity.Web.AgentIdentitiesInstallez le package Kit de développement logiciel (SDK) Azure que vous souhaitez utiliser, par exemple stockage Azure :
dotnet add package Azure.Storage.BlobsConfigurez vos services pour ajouter la prise en charge des informations d’identification par jeton Azure :
using Microsoft.AspNetCore.Authentication.OpenIdConnect; 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();Configurer les options de crédentiels de jeton Azure dans appsettings.json
Avertissement
Les secrets client ne doivent pas être utilisés comme informations d’identification client dans des environnements de production pour les blueprints d’identité de l’agent en raison des risques de sécurité. Utilisez plutôt des méthodes d’authentification plus sécurisées telles que les informations d’identification d’identité fédérée (FIC) avec des identités managées ou des certificats clients. Ces méthodes offrent une sécurité renforcée en éliminant la nécessité de stocker des secrets sensibles directement dans la configuration de votre application.
{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "<your-tenant-id>", "ClientId": "<agent-blueprint-id>", // Other client creedentials available. See <https://aka.ms/ms-id-web/client-credentials> "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "your-client-secret" } ] } }Acquérir un jeton d'authentification auprès du fournisseur de services et l'utiliser avec les clients Kit de développement logiciel (SDK) Azure.
Pour les identités d’agent, vous pouvez acquérir un jeton d’application uniquement (agents autonomes) ou un jeton d’utilisateur (agents interactifs) en utilisant la
WithAgentIdentityméthode. Pour les jetons d’application uniquement, définissez laRequestAppTokenpropriété surtrue. Pour les jetons d’utilisateur délégués au nom de quelqu'un d'autre, ne définissez pas la propriétéRequestAppTokenou définissez-la explicitement surfalse.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>> ListBlobsForAgentAppOnlyAsync(string agentIdentity) { // Configure for agent identity _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>> ListBlobsForAgentOnBehalfOfUserAsync(string agentIdentity) { // Configure for agent identity _credential.Options.WithAgentIdentity(agentIdentity); _credential.Options.RequestAppToken = false; 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; } }Vous pouvez également acquérir un jeton pour le compte d’utilisateur d’un agent. Pour ce faire, vous pouvez utiliser le nom d’utilisateur principal (UPN) ou l’identité d’objet (OID) pour identifier le compte d’utilisateur de l’agent.
Pour l’ID d’objet :
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>> ListBlobsForAgentUserByOidAsync(string agentIdentity) { // Configure for agent identity 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>> ListBlobsForAgentUserByUpnAsync(string agentIdentity) { // Configure for agent identity 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; } }