Web API'lerini çağıran bir web API'si: Kod yapılandırması

Web API'sinin kaydı tamamlandıktan sonra uygulama kodu yapılandırılabilir. Bir web API'sini aşağı akış web API'sini çağırmak için yapılandırmak, web API'sini korumak için kullanılan kod üzerinde derlemeler oluşturur. Daha fazla bilgi için bkz . Korumalı web API'si: Uygulama yapılandırması.

Microsoft.Identity.Web

Microsoft, aşağı akış web API'lerini çağıran bir ASP.NET Core korumalı API geliştirirken Microsoft.Identity.Web NuGet paketini kullanmanızı önerir. Bkz . Korumalı web API'si: Kod yapılandırması | Bir web API'si bağlamında bu kitaplığın hızlı bir sunusu için Microsoft.Identity.Web.

İstemci gizli dizileri veya istemci sertifikaları

Web uygulamanızın artık aşağı akış web API'sini çağırdığını göz önünde bulundurarak, appsettings.json dosyasında bir istemci gizli dizisi veya istemci sertifikası sağlayın. Şunları belirten bir bölüm de ekleyebilirsiniz:

  • Aşağı akış web API'sinin URL'si
  • API'yi çağırmak için gereken kapsamlar

Aşağıdaki örnekte, GraphBeta bölümü bu ayarları belirtir.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "[Enter_the_Application_Id_Here]",
    "TenantId": "common",

   // To call an API
   "ClientCredentials": [
    {
      "SourceType": "ClientSecret",
      "ClientSecret":"[Enter_the_Client_Secret_Here]"
    }
  ]
 },
 "GraphBeta": {
    "BaseUrl": "https://graph.microsoft.com/beta",
    "Scopes": ["user.read"]
    }
}

Not

Azure Kubernetes için iş yükü kimlik federasyonu gibi kimlik bilgisi olmayan bir çözüm de dahil olmak üzere bir istemci kimlik bilgileri koleksiyonu önerebilirsiniz. Microsoft.Identity.Web'in önceki sürümleri, istemci gizli dizisini "ClientCredentials" yerine tek bir "ClientSecret" özelliğinde ifade etti. Bu, geriye dönük uyumluluk için hala desteklenir, ancak hem "ClientSecret" özelliğini hem de "ClientCredentials" koleksiyonunu kullanamazsınız.

İstemci gizli dizisi yerine bir istemci sertifikası sağlayabilirsiniz. Aşağıdaki kod parçacığı, Azure Key Vault'ta depolanan bir sertifikanın kullanılmasını gösterir.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "[Enter_the_Application_Id_Here]",
    "TenantId": "common",

   // To call an API
   "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://msidentitywebsamples.vault.azure.net",
        "KeyVaultCertificateName": "MicrosoftIdentitySamplesCert"
      }
   ]
  },
  "GraphBeta": {
    "BaseUrl": "https://graph.microsoft.com/beta",
    "Scopes": ["user.read"]
  }
}

Uyarı

değerini bir dizi olarak değiştirmeyi Scopes unutursanız, kullanmayı IDownstreamApi denediğinizde kapsamlar null görünür ve aşağı akış API'sine anonim (kimliği doğrulanmamış) bir çağrı dener ve IDownstreamApi bu da ile 401/unauthenticatedsonuçlanır.

Microsoft.Identity.Web , sertifikaları hem yapılandırmaya hem de koda göre açıklamanın çeşitli yollarını sağlar. Ayrıntılar için bkz . Microsoft.Identity.Web - GitHub'da sertifikaları kullanma.

Program.cs

using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();
// ...

Web API'sinin aşağı akış API'sine yönelik bir belirteç alması gerekir. satırının arkasına .AddMicrosoftIdentityWebApi(Configuration)ekleyerek .EnableTokenAcquisitionToCallDownstreamApi() belirtin. Bu satır, ITokenAcquisition denetleyici/sayfa eylemlerinde kullanılabilecek hizmeti kullanıma sunar.

Ancak alternatif bir yöntem, belirteç önbelleği uygulamaktır. Örneğin, .AddInMemoryTokenCaches()Program.cs eklemek belirtecin bellekte önbelleğe alınmasını sağlar.

using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();
// ...

Microsoft.Identity.Web , başka bir API'den aşağı akış web API'sini çağırmak için iki mekanizma sağlar. Seçtiğiniz seçenek, Microsoft Graph'ı mı yoksa başka bir API'yi mi çağırmak istediğinize bağlıdır.

1. Seçenek: Microsoft Graph'ı çağırma

Microsoft Graph'ı çağırmak için Microsoft.Identity.Web, API eylemlerinde (Microsoft Graph SDK tarafından kullanıma sunulan) doğrudan kullanmanızı GraphServiceClient sağlar.

Not

Microsoft Graph SDK v5+ için devam eden bir sorun vardır. Daha fazla bilgi için GitHub sorununa bakın.

Microsoft Graph'ı kullanıma açmak için:

  1. Microsoft.Identity.Web.GraphServiceClient NuGet paketini projeye ekleyin.
  2. .EnableTokenAcquisitionToCallDownstreamApi() Program.cs sonra ekleyin.AddMicrosoftGraph(). .AddMicrosoftGraph() birkaç geçersiz kılmaya sahiptir. Yapılandırma bölümünü parametre olarak alan geçersiz kılma kullanıldığında kod şu hale gelir:
using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddMicrosoftGraph(Configuration.GetSection("GraphBeta"))
    .AddInMemoryTokenCaches();
// ...

Seçenek 2: Microsoft Graph dışında bir aşağı akış web API'sini çağırma

  1. Microsoft.Identity.Web.DownstreamApi NuGet paketini projeye ekleyin.
  2. .EnableTokenAcquisitionToCallDownstreamApi() Program.cs sonra ekleyin.AddDownstreamApi(). Kod şöyle olur:
using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
    .AddInMemoryTokenCaches();
// ...

Nerede;

  • MyApi web API'nizin çağırmak istediği aşağı akış web API'sinin adını belirtir
  • MyApiScope , web API'nizin aşağı akış web API'siyle etkileşim kurmak için istemesi için gereken kapsamdır

Bu değerler JSON'unuzda aşağıdaki kod parçacığına benzer şekilde gösterilir.

"DownstreamAPI": {
      "BaseUrl": "https://downstreamapi.contoso.com/",
      "Scopes": "user.read"
    },

Web uygulamasının başka bir API kaynağını çağırması gerekiyorsa, aşağıdaki kod parçacığında gösterildiği gibi yöntemini ilgili kapsamla yineleyin .AddDownstreamApi() :

using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
    .AddDownstreamApi("MyApi2", Configuration.GetSection("MyApi2Scope"))
    .AddInMemoryTokenCaches();
// ...

Herhangi bir parametre olmadan çağrıldığını .EnableTokenAcquisitionToCallDownstreamApi unutmayın, yani denetleyici kapsamı belirterek belirteci istediğinde erişim belirteci tam zamanında alınır.

Kapsam çağrılırken .EnableTokenAcquisitionToCallDownstreamApide geçirilebilir ve bu da web uygulamasının ilk kullanıcı oturum açma işlemi sırasında belirteci almasını sağlar. Ardından denetleyici istediğinde belirteç önbellekten çekilir.

Web uygulamalarına benzer şekilde, çeşitli belirteç önbelleği uygulamaları seçilebilir. Ayrıntılar için bkz . Microsoft identity web - GitHub'da belirteç önbelleği serileştirme .

Aşağıdaki görüntüde Microsoft.Identity.Web'in olasılıkları ve Program.cs üzerindeki etkisi gösterilmektedir:

Block diagram showing service configuration options in startup dot C S for calling a web API and specifying a token cache implementation

Not

Buradaki kod örneklerini tam olarak anlamak için ASP.NET Core temelleri ve özellikle bağımlılık ekleme ve seçenekleri hakkında bilgi sahibi olun.

Node.js ve Azure İşlevleri'de OBO akış uygulaması örneğini de görebilirsiniz.

Protokol

OBO protokolü hakkında daha fazla bilgi için Microsoft kimlik platformu ve OAuth 2.0 On-Behalf-Of akışına bakın.

Sonraki adımlar

Bu senaryoda uygulama için belirteç alma adlı sonraki makaleye geçin.