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.
Es gibt mehrere Möglichkeiten, benutzerdefinierte APIs von einem Agent aufzurufen. Abhängig von Ihrem Szenario können Sie entweder IDownstreamApi, MicrosoftIdentityMessageHandler oder IAuthorizationHeaderProvider. In diesem Leitfaden werden die verschiedenen Ansätze zum Aufrufen ihrer eigenen geschützten APIs auf alle drei Arten erläutert.
Um eine API von einem Agent aufzurufen, müssen Sie ein Zugriffstoken abrufen, das der Agent verwenden kann, um sich selbst bei der API zu authentifizieren. Wir empfehlen die Verwendung des Microsoft.Identity.Web SDK für .NET zum Aufrufen Ihrer Web-APIs. Dieses SDK vereinfacht den Prozess des Abrufens und Validierens von Token. Verwenden Sie für andere Sprachen das Microsoft Entra-Agent-SDK für die Agent-ID.
Voraussetzungen
- Eine Agentidentität mit entsprechenden Berechtigungen zum Aufrufen der Ziel-API. Sie benötigen einen Benutzer für den On-Behalf-of-Flow.
- Ein Agentbenutzer mit entsprechenden Berechtigungen zum Aufrufen der Ziel-API.
Entscheiden, welcher Ansatz basierend auf Ihrem Szenario verwendet werden soll
In der folgenden Tabelle können Sie entscheiden, welcher Ansatz verwendet werden soll. Für die meisten Szenarien empfehlen wir die Verwendung IDownstreamApi.
| Vorgehensweise | Kompliziertheit | Flexibilität | Anwendungsfall |
|---|---|---|---|
IDownstreamApi |
Low | Mittelstufe | Standard-REST-APIs mit Konfiguration |
MicrosoftIdentityMessageHandler |
Mittelstufe | High | HttpClient mit Direct Injection (DI) und composable Pipeline |
IAuthorizationHeaderProvider |
High | Sehr hoch | Vollständige Kontrolle über HTTP-Anforderungen |
- Verwenden von IDownstreamApi
- Verwenden von MicrosoftIdentityMessageHandler
- Verwenden von IAuthorizationHeaderProvider
IDownstreamApi ist die bevorzugte Methode zum Aufrufen einer geschützten API zwischen den drei Optionen. Es ist sehr konfigurierbar und erfordert minimale Codeänderungen. Es bietet auch die automatische Token-Erfassung.
Verwenden Sie IDownstreamApi, wenn Sie die folgenden Elemente benötigen:
- Sie rufen standardmäßige REST-APIs auf
- Sie möchten einen konfigurationsgesteuerten Ansatz
- Sie benötigen die automatische Serialisierung/Deserialisierung.
- Sie möchten minimalen Code schreiben
Aufrufen Ihrer API
Nachdem Sie ermittelt haben, was für Sie funktioniert, rufen Sie ihre benutzerdefinierte Web-API auf.
Warnung
Geheime Clientschlüssel sollten aufgrund von Sicherheitsrisiken nicht als Clientanmeldeinformationen in Produktionsumgebungen für Agentidentitäts-Blueprints verwendet werden. Verwenden Sie stattdessen sicherere Authentifizierungsmethoden wie Verbundidentitätsanmeldeinformationen (FIC) mit verwalteten Identitäten oder Clientzertifikaten. Diese Methoden bieten eine verbesserte Sicherheit, da vertrauliche geheime Schlüssel nicht direkt in Ihrer Anwendungskonfiguration gespeichert werden müssen.
- Verwenden von IDownstreamApi
- Verwenden von MicrosoftIdentityMessageHandler
- Verwenden von IAuthorizationHeaderProvider
Installieren Sie das erforderliche NuGet-Paket:
dotnet add package Microsoft.Identity.Web.DownstreamApi dotnet add package Microsoft.Identity.Web.AgentIdentitiesKonfigurieren Sie tokenanmeldeinformationsoptionen und Ihre APIs in appsettings.json.
{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "your-tenant-id", "ClientId": "your-blueprint-id", "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "your-client-secret" } ] }, "DownstreamApis": { "MyApi": { "BaseUrl": "https://api.example.com", "Scopes": ["api://my-api-client-id/read", "api://my-api-client-id/write"], "RelativePath": "/api/v1", "RequestAppToken": false } } }Konfigurieren Sie Ihre Dienste, um nachgeschaltete API-Unterstützung hinzuzufügen:
using Microsoft.Identity.Web; var builder = WebApplication.CreateBuilder(args); // Add authentication builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); // Register downstream APIs builder.Services.AddDownstreamApis( builder.Configuration.GetSection("DownstreamApis")); // Add Agent Identities support builder.Services.AddAgentIdentities(); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();Rufen Sie Ihre geschützte API mithilfe von
IDownstreamApi. Beim Aufrufen der API können Sie die Agent-Identität oder die Agent-Benutzeridentität mithilfe derWithAgentIdentityoderWithAgentUserIdentityMethoden angeben.IDownstreamApiverarbeitet automatisch die Tokenerfassung und fügt das Zugriffstoken an die Anforderung an.Sie können für
WithAgentIdentitydie API entweder mit einem nur für App Token (autonomer Agent) oder im Auftrag eines Benutzers (interaktiver Agent) aufrufen.using Microsoft.Identity.Abstractions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; [Authorize] public class ProductsController : Controller { private readonly IDownstreamApi _api; public ProductsController(IDownstreamApi api) { _api = api; } // GET request for app only token scenario for agent identity public async Task<IActionResult> Index() { string agentIdentity = "<your-agent-identity>"; var products = await _api.GetForAppAsync<List<Product>>( "MyApi", "products", options => options.WithAgentIdentity(agentIdentity)); return View(products); } // GET request for on-behalf of user token scenario for agent identity public async Task<IActionResult> UserProducts() { string agentIdentity = "<your-agent-identity>"; var products = await _api.GetForUserAsync<List<Product>>( "MyApi", "products", options => options.WithAgentIdentity(agentIdentity)); return View(products); } }Für
WithAgentUserIdentitydiese Eigenschaft können Sie entweder den Benutzerprinzipalnamen (User Principal Name, UPN) oder die Objektidentität (Object Identity, OID) angeben, um den Agentbenutzer zu identifizieren.using Microsoft.Identity.Abstractions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; [Authorize] public class ProductsController : Controller { private readonly IDownstreamApi _api; public ProductsController(IDownstreamApi api) { _api = api; } // GET request for agent user identity using UPN public async Task<IActionResult> Index() { string agentIdentity = "<your-agent-identity>"; string userUpn = "user@contoso.com"; var products = await _api.GetForUserAsync<List<Product>>( "MyApi", "products", options => options.WithAgentUserIdentity(agentIdentity, userUpn)); return View(products); } // GET request for agent user identity using OID public async Task<IActionResult> UserProducts() { string agentIdentity = "<your-agent-identity>"; string userOid = "user-object-id"; var products = await _api.GetForUserAsync<List<Product>>( "MyApi", "products", options => options.WithAgentUserIdentity(agentIdentity, userOid)); return View(products); } }