Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Existují různé způsoby volání vlastních rozhraní API z agenta. V závislosti na vašem scénáři můžete použít buď IDownstreamApi, MicrosoftIdentityMessageHandlernebo IAuthorizationHeaderProvider. Tato příručka vysvětluje různé přístupy pro volání vlastních chráněných rozhraní API všemi třemi způsoby.
Pokud chcete volat rozhraní API z agenta, musíte získat přístupový token, který může agent použít k ověření v rozhraní API. Doporučujeme použít Microsoft. Identity.Web SDK pro .NET pro volání webových rozhraní API Tato sada SDK zjednodušuje proces získávání a ověřování tokenů. Pro ostatní jazyky použijte sadu SDK Microsoft Entra ID Auth (sidecar).
Předpoklady
- Identita agenta s příslušnými oprávněními pro volání cílového rozhraní API. Pro tok v zastoupení potřebujete uživatele.
- Uživatelský účet agenta s příslušnými oprávněními pro volání cílového rozhraní API.
Rozhodněte se, který přístup se má použít v závislosti na vašem scénáři.
Následující tabulka vám pomůže rozhodnout, který přístup se má použít. Pro většinu scénářů doporučujeme použít IDownstreamApi.
| Přístup | Složitost | Flexibilita | Případ použití |
|---|---|---|---|
IDownstreamApi |
Nízká úroveň | Středně | Standardní rozhraní REST API s konfigurací |
MicrosoftIdentityMessageHandler |
Středně | Vysoko | HttpClient s přímou injekcí (DI) a složitelným kanálem |
IAuthorizationHeaderProvider |
Vysoko | Velmi vysoká | Úplná kontrola nad požadavky HTTP |
- Použití IDownstreamApi
- Použijte MicrosoftIdentityMessageHandler
- Použijte IAuthorizationHeaderProvider
IDownstreamApi je upřednostňovaným způsobem volání chráněného rozhraní API mezi třemi možnostmi. Je vysoce konfigurovatelná a vyžaduje minimální změny kódu. Nabízí také automatické získávání tokenů.
Použijte IDownstreamApi , když potřebujete následující uvedené položky:
- Voláte standardní rozhraní REST API.
- Chcete přístup řízený konfigurací.
- Potřebujete automatickou serializaci/deserializaci.
- Chcete napsat minimální kód.
Zavolejte své rozhraní API
Po určení toho, co vám vyhovuje, pokračujte voláním vlastního webového rozhraní API.
Výstraha
Tajné kódy klienta by se neměly používat jako přihlašovací údaje klienta v produkčních prostředích pro podrobné plány identit agentů kvůli rizikům zabezpečení. Místo toho používejte bezpečnější metody ověřování, jako jsou přihlašovací údaje federované identity (FIC) se spravovanými identitami nebo klientskými certifikáty . Tyto metody poskytují lepší zabezpečení tím, že eliminují potřebu ukládat citlivé tajné kódy přímo v konfiguraci vaší aplikace.
- Použití IDownstreamApi
- Použijte MicrosoftIdentityMessageHandler
- Použijte IAuthorizationHeaderProvider
Nainstalujte požadovaný balíček NuGet:
dotnet add package Microsoft.Identity.Web.DownstreamApi dotnet add package Microsoft.Identity.Web.AgentIdentitiesKonfigurace možností přihlašovacích údajů tokenu a vašich rozhraní API v 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 } } }Nakonfigurujte služby pro přidání podpory podřízených rozhraní API:
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();Zavolejte své chráněné rozhraní API pomocí
IDownstreamApi. Při volání rozhraní API můžete určit identitu agenta nebo identitu uživatelského účtu agenta pomocíWithAgentIdentitymetod neboWithAgentUserIdentitymetod.IDownstreamApiautomaticky zpracuje získání tokenu a připojí přístupový token k požadavku.V případě
WithAgentIdentitybuď zavoláte rozhraní API pomocí tokenu pouze pro aplikaci (autonomního agenta), nebo jménem uživatele (interaktivního 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 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); } }Pro
WithAgentUserIdentityurčení uživatelského účtu agenta můžete zadat hlavní název uživatele (UPN) nebo identitu objektu (OID).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); } }