Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir aracıdan özel API'leri çağırmanın birden çok yolu vardır. Senaryonuza bağlı olarak , IDownstreamApiveya MicrosoftIdentityMessageHandlerkullanabilirsinizIAuthorizationHeaderProvider. Bu kılavuzda, kendi korumalı API'lerinizi çağırmak için üç yöntemin tümüne yönelik farklı yaklaşımlar açıklanmaktadır.
Bir aracıdan API çağırmak için, aracının API'de kimliğini doğrulamak için kullanabileceği bir erişim belirteci almanız gerekir. Microsoft.Identity.Web SDK'sını .NET için web API'lerinizi çağırmak üzere kullanmanızı öneririz. Bu SDK, belirteçleri alma ve doğrulama işlemini basitleştirir. Diğer diller için, aracı kimliği için Microsoft Entra aracı SDK'sını kullanın.
Önkoşullar
- Hedef API'yi çağırmak için uygun izinlere sahip bir aracı kimliği. Akış adına işlem için bir kullanıcıya ihtiyacınız vardır.
- Hedef API’yi çağırmak için uygun izinlere sahip bir ajanın kullanıcı hesabı.
Senaryonuza göre hangi yaklaşımı kullanacağınıza karar verin
Aşağıdaki tablo, hangi yaklaşımı kullanacağınıza karar vermenize yardımcı olur. Çoğu senaryo için kullanmanızı IDownstreamApiöneririz.
| Yaklaşım | Karmaşıklık | Esneklik | Kullanım Örneği |
|---|---|---|---|
IDownstreamApi |
Low | Orta | Yapılandırma ile standart REST API'leri |
MicrosoftIdentityMessageHandler |
Orta | Yüksek | Doğrudan Ekleme (DI) ve birleştirilebilir işlem hattı ile HttpClient |
IAuthorizationHeaderProvider |
Yüksek | Çok Yüksek | HTTP istekleri üzerinde tam denetim |
- IDownstreamApi kullanma
- MicrosoftIdentityMessageHandler kullanma
- IAuthorizationHeaderProvider kullanın
IDownstreamApi , üç seçenek arasında korumalı API çağırmanın tercih edilen yoludur. Yüksek oranda yapılandırılabilir ve en az kod değişikliği gerektirir. Ayrıca otomatik jeton alımı da sunar.
Aşağıdaki listelenen öğelere ihtiyacınız olduğunda kullanın IDownstreamApi :
- Standart REST API'lerini çağırıyorsunuz
- Yapılandırma temelli bir yaklaşım istiyorsunuz
- Otomatik serileştirme ve seri durumdan çıkarma ihtiyacınız var.
- En az kod yazmak istiyorsunuz
API'nizi çağırma
Sizin için neyin işe yaradığını belirledikten sonra özel web API'nizi çağırmaya devam edin.
Uyarı
Güvenlik risklerinden dolayı istemci sırları, ajan kimlik planları için üretim ortamlarında istemci kimlik bilgileri olarak kullanılmamalıdır. Bunun yerine, yönetilen kimliklerle veya istemci sertifikalarıyla federasyon kimlik bilgileri (FIC) gibi daha güvenli kimlik doğrulama yöntemleri kullanın. Bu yöntemler, hassas gizli dizileri doğrudan uygulama yapılandırmanızda depolama gereksinimini ortadan kaldırarak gelişmiş güvenlik sağlar.
- IDownstreamApi kullanma
- MicrosoftIdentityMessageHandler kullanma
- IAuthorizationHeaderProvider kullanın
Gerekli NuGet paketini yükleyin:
dotnet add package Microsoft.Identity.Web.DownstreamApi dotnet add package Microsoft.Identity.Web.AgentIdentitiesappsettings.json'de belirteç kimlik bilgisi seçeneklerini ve API'lerinizi yapılandırın.
{ "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 } } }Aşağı akış API desteği eklemek için hizmetlerinizi yapılandırın:
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();Korumalı API'nizi kullanarak
IDownstreamApiçağırın. API'yi çağırırkenWithAgentIdentityveyaWithAgentUserIdentityyöntemlerinden birini kullanarak aracı kimliğini veya kullanıcının hesap kimliğini belirtebilirsiniz.IDownstreamApibelirteç alma işlemini otomatik olarak işler ve erişim belirtecini isteğe ekler.WithAgentIdentityiçin, API'yi ya yalnızca bir uygulama belirteci (otonom ajan) kullanarak ya da bir kullanıcı adına (etkileşimli ajan) çağırırsınız.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); } }için
WithAgentUserIdentity, aracının kullanıcı hesabını tanımlamak için Kullanıcı Asıl Adı (UPN) veya Nesne Kimliği (OID) belirtebilirsiniz.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); } }