Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Nachdem ein interaktiver Agent die Benutzerautorisierung erhalten hat, muss er Zugriffstoken anfordern, die zum Aufrufen von APIs im Namen des Benutzers verwendet werden können. Dieser Artikel führt Sie durch die Implementierung des On-Behalf-Of (OBO) Flusses, um delegierte Zugriffstoken für Ihren interaktiven Agenten abzurufen.
Der OBO-Fluss ermöglicht eine Web-API:
- Empfangen eines Zugriffstokens von einem Client.
- Tauschen Sie es gegen ein neues Zugriffstoken für eine nachgelagerte API wie Microsoft Graph aus.
- Verwenden Sie dieses neue Token, um im Namen des ursprünglichen Benutzers auf geschützte Ressourcen zuzugreifen.
Voraussetzungen
Stellen Sie vor dem Anfordern von Benutzertoken folgendes sicher:
- Eine Agentidentität
- Abgeschlossene Benutzerautorisierung wie unter Konfigurieren der Benutzerautorisierung beschrieben
- Zugriffstoken mit entsprechenden Berechtigungen für Ihre Agentenidentität
Anfordern von Benutzertoken
Sie können den OBO-Fluss zwar manuell mithilfe des Protokolls implementieren, wir empfehlen jedoch die Verwendung der Microsoft.Identity.Web Bibliothek, die die Implementierung vereinfacht.
Installieren Sie das erforderliche NuGet-Paket:
dotnet add package Microsoft.Identity.Web dotnet add package Microsoft.Identity.Web.AgentIdentitiesAktualisieren Sie in Ihrem ASP.NET Kernweb-API-Projekt die Microsoft Entra ID-Authentifizierungsimplementierung.
// 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); // With Microsoft.Identity.Web builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi(); builder.Services.AddAgentIdentities(); builder.Services.AddInMemoryTokenCaches(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.Run();Tauschen Sie in der Agent-API das eingehende Zugriffstoken für ein neues Zugriffstoken für die Agentidentität aus. Microsoft.Identity.Web übernimmt die Überprüfung des eingehenden Zugriffstokens, wurde jedoch derzeit nicht aktualisiert, um den On-Behalf-Of-Token-Austausch zu verarbeiten.
app.MapGet("/agent-obo-user", async (HttpContext httpContext) => { string agentid = "<your-agent-identity>"; // Get the service to call the downstream API (preconfigured in the appsettings.json file) IAuthorizationHeaderProvider authorizationHeaderProvider = httpContext.RequestServices.GetService<IAuthorizationHeaderProvider>()!; AuthorizationHeaderProviderOptions options = new AuthorizationHeaderProviderOptions().WithAgentIdentity(agentid); // Request user token for the agent identity string authorizationHeaderWithUserToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(["https://graph.microsoft.com/.default"], options); var response = new { header = authorizationHeaderWithUserToken }; return Results.Json(response); }) .RequireAuthorization();
Verwenden des Microsoft Graph SDK
Wenn Sie das Microsoft Graph SDK verwenden, können Sie sich mit GraphServiceClient bei Microsoft Graph authentifizieren.
Installieren Sie den *Microsoft.Identity.Web.GraphServiceClient, der die Authentifizierung für das Graph SDK verarbeitet
dotnet add package Microsoft.Identity.Web.GraphServiceClientFügen Sie in Ihrem ASP.NET Kernweb-API-Projekt die Unterstützung für Microsoft Graph in Ihrer Dienstsammlung hinzu.
services.AddMicrosoftGraph();Holen Sie sich ein
GraphServiceClientvom Dienstanbieter und rufen Sie Microsoft Graph-APIs mit der Agentidentität auf.app.MapGet("/agent-obo-user", async (HttpContext httpContext) => { string agentIdentity = "<your-agent-identity>"; builder.Services.AddMicrosoftGraph(); GraphServiceClient graphServiceClient = httpContext.RequestServices.GetService<GraphServiceClient>()!; var me = await graphServiceClient.Me.GetAsync(r => r.Options.WithAuthenticationOptions( o => { o.WithAgentIdentity(agentIdentity); })); return me.UserPrincipalName; })