Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Istnieje wiele sposobów wywoływania niestandardowych interfejsów API z agenta. W zależności od scenariusza można użyć polecenia IDownstreamApi, MicrosoftIdentityMessageHandlerlub IAuthorizationHeaderProvider. W tym przewodniku wyjaśniono różne podejścia do wywoływania własnych chronionych interfejsów API na wszystkie trzy sposoby.
Aby wywołać interfejs API z agenta, należy uzyskać token dostępu, którego agent może użyć do uwierzytelnienia się w interfejsie API. Zalecamy użycie Microsoft. Identity.Web SDK for .NET do wywoływania internetowych interfejsów API. Ten zestaw SDK upraszcza proces uzyskiwania i weryfikowania tokenów. Dla innych języków użyj zestawu SDK uwierzytelniania Microsoft Entra ID (sidecar).
Wymagania wstępne
- Tożsamość agenta z odpowiednimi uprawnieniami do wywoływania docelowego interfejsu API. Potrzebujesz użytkownika do procesu wykonywanego w imieniu innych.
- Konto użytkownika agenta z odpowiednimi uprawnieniami do wywoływania docelowego interfejsu API.
Zdecyduj, które podejście ma być używane w zależności od scenariusza
Poniższa tabela ułatwia podjęcie decyzji o tym, które podejście ma być używane. W przypadku większości scenariuszy zalecamy użycie polecenia IDownstreamApi.
| Metoda | Złożoność | Elastyczność | Przypadek użycia |
|---|---|---|---|
IDownstreamApi |
Low | Średni | Standardowe interfejsy API REST z konfiguracją |
MicrosoftIdentityMessageHandler |
Średni | High | HttpClient z bezpośrednim wstrzyknięciem (DI) i potokiem komponowalnym |
IAuthorizationHeaderProvider |
High | Bardzo wysoka | Pełna kontrola nad żądaniami HTTP |
- Korzystanie z interfejsu IDownstreamApi
- Korzystanie z programu MicrosoftIdentityMessageHandler
- Korzystanie z elementu IAuthorizationHeaderProvider
IDownstreamApi jest preferowanym sposobem wywoływania chronionego interfejsu API między trzema opcjami. Jest on wysoce konfigurowalny i wymaga minimalnych zmian w kodzie. Oferuje również automatyczne pozyskiwanie tokenów.
Użyj IDownstreamApi, gdy potrzebne są następujące elementy:
- Wywołujesz standardowe interfejsy API REST
- Potrzebujesz podejścia opartego na konfiguracji
- Potrzebna jest automatyczna serializacja/deserializacja
- Chcesz napisać minimalny kod
Wywołaj swoje API
Po określeniu, co działa dla Ciebie, przejdź do wywołania niestandardowego internetowego interfejsu API.
Ostrzeżenie
Tajne klucze klienta nie powinny być używane jako poświadczenia klienta w środowiskach produkcyjnych dla szablonów tożsamości agenta ze względu na zagrożenia bezpieczeństwa. Zamiast tego należy użyć bezpieczniejszych metod uwierzytelniania, takich jak poświadczenia tożsamości federacyjnej (FIC) z tożsamościami zarządzanymi lub certyfikatami klienta. Te metody zapewniają zwiększone zabezpieczenia, eliminując konieczność przechowywania poufnych wpisów tajnych bezpośrednio w ramach konfiguracji aplikacji.
- Korzystanie z interfejsu IDownstreamApi
- Korzystanie z programu MicrosoftIdentityMessageHandler
- Korzystanie z elementu IAuthorizationHeaderProvider
Zainstaluj wymagany pakiet NuGet:
dotnet add package Microsoft.Identity.Web.DownstreamApi dotnet add package Microsoft.Identity.Web.AgentIdentitiesSkonfiguruj opcje poświadczeń tokenu i interfejsy API w 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 } } }Skonfiguruj usługi, aby dodać obsługę interfejsu API podrzędnego:
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(); // 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();Wywołaj chroniony interfejs API przy użyciu polecenia
IDownstreamApi. Podczas wywoływania interfejsu API można określić tożsamość agenta lub tożsamość konta użytkownika agenta przy użyciu metodWithAgentIdentitylubWithAgentUserIdentity.IDownstreamApiautomatycznie obsługuje pozyskiwanie tokenów i dołącza token dostępu do żądania.Aby
WithAgentIdentity, możesz wywołać interfejs API przy użyciu tokenu tylko dla aplikacji (agenta autonomicznego) lub w imieniu użytkownika (agenta interaktywnego).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); } }W przypadku
WithAgentUserIdentitymożna określić główną nazwę użytkownika (UPN) lub tożsamość obiektu (OID), aby zidentyfikować konto użytkownika agenta.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's user account 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's user account 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); } }