Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ada beberapa cara untuk memanggil API kustom dari agen. Bergantung pada skenario Anda, Anda dapat menggunakan IDownstreamApi, , MicrosoftIdentityMessageHandleratau IAuthorizationHeaderProvider. Panduan ini menjelaskan berbagai pendekatan untuk memanggil API yang dilindungi Anda sendiri dengan ketiga cara tersebut.
Untuk memanggil API dari agen, Anda perlu mendapatkan token akses yang dapat digunakan agen untuk mengautentikasi dirinya ke API. Sebaiknya gunakan Microsoft. Identity.Web SDK untuk .NET memanggil API web Anda. SDK ini menyederhanakan proses memperoleh dan memvalidasi token. Untuk bahasa lain, gunakan Microsoft Entra ID Auth SDK (sidecar).
Prasyarat
- Identitas agen dengan izin yang sesuai untuk memanggil API target. Anda memerlukan pengguna untuk proses alur atas nama.
- Akun pengguna agen dengan izin yang sesuai untuk memanggil API target.
Memutuskan pendekatan mana yang akan digunakan berdasarkan skenario Anda
Tabel berikut ini membantu Anda memutuskan pendekatan mana yang akan digunakan. Untuk sebagian besar skenario, sebaiknya gunakan IDownstreamApi.
| Pendekatan | Kompleksitas | Fleksibilitas | Kasus Penggunaan |
|---|---|---|---|
IDownstreamApi |
Rendah | Medium | REST API standar dengan konfigurasi |
MicrosoftIdentityMessageHandler |
Medium | Tinggi | HttpClient dengan Direct Injection (DI) dan alur yang dapat disusun |
IAuthorizationHeaderProvider |
Tinggi | Sangat Tinggi | Kontrol penuh atas permintaan HTTP |
- Menggunakan IDownstreamApi
- Menggunakan MicrosoftIdentityMessageHandler
- Menggunakan IAuthorizationHeaderProvider
IDownstreamApi adalah cara yang disukai untuk memanggil API yang dilindungi di antara tiga opsi. Ini sangat dapat dikonfigurasi dan memerlukan perubahan kode minimal. Ini juga menawarkan akuisisi token otomatis.
Gunakan IDownstreamApi saat Anda memerlukan item yang tercantum berikut ini:
- Anda memanggil REST API standar
- Anda menginginkan pendekatan berbasis konfigurasi
- Anda memerlukan serialisasi/deserialisasi otomatis
- Anda ingin menulis kode minimal
Memanggil API Anda
Setelah menentukan apa yang berfungsi untuk Anda, lanjutkan untuk memanggil API web kustom Anda.
Peringatan
Rahasia klien tidak boleh digunakan sebagai kredensial klien di lingkungan produksi untuk cetak biru identitas agen karena risiko keamanan. Sebagai gantinya, gunakan metode autentikasi yang lebih aman seperti kredensial identitas gabungan (FIC) dengan identitas terkelola atau sertifikat klien. Metode ini memberikan keamanan yang ditingkatkan dengan menghilangkan kebutuhan untuk menyimpan rahasia sensitif langsung dalam konfigurasi aplikasi Anda.
- Menggunakan IDownstreamApi
- Menggunakan MicrosoftIdentityMessageHandler
- Menggunakan IAuthorizationHeaderProvider
Instal paket NuGet yang diperlukan:
dotnet add package Microsoft.Identity.Web.DownstreamApi dotnet add package Microsoft.Identity.Web.AgentIdentitiesKonfigurasikan opsi kredensial token dan API Anda di 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 } } }Konfigurasikan layanan Anda untuk menambahkan dukungan API hilir:
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();Panggil API terproteksi Anda menggunakan
IDownstreamApi. Saat memanggil API, Anda dapat menentukan identitas agen atau identitas akun pengguna agen menggunakanWithAgentIdentitymetode atauWithAgentUserIdentity.IDownstreamApisecara otomatis menangani akuisisi token dan melampirkan token akses ke permintaan.Untuk
WithAgentIdentity, Anda dapat memanggil API menggunakan token aplikasi saja (agen otonom) atau atas nama pengguna (agen interaktif).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); } }Untuk
WithAgentUserIdentity, Anda dapat menentukan Nama Prinsipal Pengguna (UPN) atau Identitas Objek (OID) untuk mengidentifikasi akun pengguna agen.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); } }