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

Kullanıcılar senaryosunda oturum açma web uygulamasında gösterildiği gibi, web uygulaması kullanıcıyı oturum açmak için OAuth 2.0 yetkilendirme kodu akışını kullanır. Bu akışın iki adımı vardır:

  1. Yetkilendirme kodu isteyin. Bu bölüm, kullanıcıyla Microsoft kimlik platformu özel bir iletişim kutusu temsil eder. Bu iletişim kutusu sırasında kullanıcı oturum açar ve web API'lerinin kullanımını onaylar. Özel iletişim kutusu başarıyla sona erdiğinde, web uygulaması yeniden yönlendirme URI'sinde bir yetkilendirme kodu alır.
  2. Yetkilendirme kodunu kullanarak API için erişim belirteci isteyin.

Kullanıcı senaryolarında oturum açabilen Web uygulaması yalnızca ilk adımı ele alır. Burada, web uygulamanızı yalnızca kullanıcıların oturumunu açmakla kalmaz, aynı zamanda web API'lerini de çağıracak şekilde nasıl değiştireceğinizi öğreneceksiniz.

Web uygulamalarını destekleyen Microsoft kitaplıkları

Aşağıdaki Microsoft kitaplıkları web uygulamalarını destekler:

Dil / çerçeve Proje açık
GitHub
Paket Alma
birini seçin
Oturum açma kullanıcıları Web API'lerine erişme Genel kullanıma açık (GA) veya
Genel önizleme1
.NET MSAL.NET Microsoft.Identity.Client Kitaplık, kullanıcı oturum açma işlemi için kimlik belirteci isteyemez. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyebilir. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel Kitaplık, kullanıcı oturum açma işlemi için kimlik belirteci isteyemez.2 Kitaplık, korumalı web API'leri için erişim belirteçleri isteyemez.2 GA
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Hızlı Başlangıç Kitaplık, kullanıcı oturum açma için kimlik belirteçleri isteyebilir. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyemez. GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Hızlı Başlangıç Kitaplık, kullanıcı oturum açma için kimlik belirteçleri isteyebilir. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyebilir. GA
Java MSAL4J msal4j Hızlı Başlangıç Kitaplık, kullanıcı oturum açma için kimlik belirteçleri isteyebilir. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyebilir. GA
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Öğretici Kitaplık, kullanıcı oturum açma için kimlik belirteçleri isteyebilir. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyebilir. GA
Node.js MSAL Düğümü msal-node Hızlı Başlangıç Kitaplık, kullanıcı oturum açma için kimlik belirteçleri isteyebilir. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyebilir. GA
Python MSAL Python msal Kitaplık, kullanıcı oturum açma için kimlik belirteçleri isteyebilir. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyebilir. GA
Python Kimlik Kimlik Hızlı Başlangıç Kitaplık, kullanıcı oturum açma için kimlik belirteçleri isteyebilir. Kitaplık, korumalı web API'leri için erişim belirteçleri isteyebilir. --

(1)Çevrimiçi Hizmetler için Evrensel Lisans Koşulları, Genel önizlemedeki kitaplıklar için geçerlidir.

(2)Microsoft.IdentityModel kitaplığı yalnızca belirteçleri doğrular ; kimlik veya erişim belirteçleri isteyemez.

İlgilendiğiniz platformun sekmesini seçin:

İ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.

Startup.cs

Web uygulamanızın aşağı akış API'sine yönelik bir belirteç alması gerekir. satırının arkasına .AddMicrosoftIdentityWebApp(Configuration)ekleyerek .EnableTokenAcquisitionToCallDownstreamApi() bunu belirtirsiniz. Bu satır, IAuthorizationHeaderProvider denetleyicinizde ve sayfa eylemlerinizde kullanabileceğiniz hizmeti kullanıma sunar. Ancak, aşağıdaki iki seçenekte gördüğünüz gibi, daha basit bir şekilde yapılabilir. Ayrıca, Startup.cs'de bir .AddInMemoryTokenCaches()belirteç önbelleği uygulaması seçmeniz de gerekir:

using Microsoft.Identity.Web;

public class Startup
{
  // ...
  public void ConfigureServices(IServiceCollection services)
  {
  // ...
  services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
          .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
            .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
            .AddInMemoryTokenCaches();
   // ...
  }
  // ...
}

'a EnableTokenAcquisitionToCallDownstreamApi geçirilen kapsamlar isteğe bağlıdır ve web uygulamanızın oturum açarken kapsamları ve kullanıcının bu kapsamlara onayını istemesini sağlar. Kapsamları belirtmezseniz, Microsoft.Identity.Web artımlı bir onay deneyimi sağlar.

Microsoft.Identity.Web , belirteç almanıza gerek kalmadan bir web uygulamasından web API'sini çağırmak için iki mekanizma sunar. 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 istiyorsanız, Microsoft.Identity.Web API eylemlerinizde (Microsoft Graph SDK'sı tarafından kullanıma sunulan) doğrudan kullanmanızı GraphServiceClient sağlar. Microsoft Graph'ı kullanıma açmak için:

  1. Projenize Microsoft.Identity.Web.GraphServiceClient NuGet paketini ekleyin.

  2. Startup.cs dosyasına sonra .EnableTokenAcquisitionToCallDownstreamApi() 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;
    
    public class Startup
    {
      // ...
      public void ConfigureServices(IServiceCollection services)
      {
      // ...
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
                .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
                   .AddMicrosoftGraph(Configuration.GetSection("GraphBeta"))
                .AddInMemoryTokenCaches();
       // ...
      }
      // ...
    }
    

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

Microsoft Graph dışında bir API çağırmak istiyorsanız, Microsoft.Identity.Web API eylemlerinizde arabirimi kullanmanıza IDownstreamApi olanak tanır. Bu arabirimi kullanmak için:

  1. Projenize Microsoft.Identity.Web.DownstreamApi NuGet paketini ekleyin.

  2. Startup.cs dosyasına sonra .EnableTokenAcquisitionToCallDownstreamApi() ekleyin.AddDownstreamApi(). .AddDownstreamApi() iki bağımsız değişkeni vardır ve aşağıdaki kod parçacığında gösterilir:

    • Denetleyici eylemlerinizde karşılık gelen yapılandırmaya başvurmak için kullanılan bir hizmetin (API) adı
    • aşağı akış web API'sini çağırmak için kullanılan parametreleri temsil eden bir yapılandırma bölümü.
    using Microsoft.Identity.Web;
    
    public class Startup
    {
      // ...
      public void ConfigureServices(IServiceCollection services)
      {
      // ...
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
                .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
                   .AddDownstreamApi("MyApi", Configuration.GetSection("GraphBeta"))
                .AddInMemoryTokenCaches();
       // ...
      }
      // ...
    }
    

Özet

Web API'lerinde olduğu gibi çeşitli belirteç önbelleği uygulamalarını seçebilirsiniz. Ayrıntılar için bkz . GitHub'da Microsoft.Identity.Web - Belirteç önbelleği serileştirmesi .

Aşağıdaki görüntüde Microsoft.Identity.Web'in çeşitli olasılıkları ve bunların Startup.cs dosyası üzerindeki etkisi gösterilmektedir:

Web API'sini çağırmak ve belirteç önbelleği uygulaması belirtmek için başlangıç noktası C S'deki hizmet yapılandırma seçeneklerini gösteren blok diyagramı

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.

Yetkilendirme kodunu kullanan kod

Microsoft.Identity.Web doğru OpenID Bağlan ayarlarını yaparak, alınan kod olayına abone olarak ve kodu kullanarak kodunuzu basitleştirir. Yetkilendirme kodunu kullanmak için ek kod gerekmez. Bunun nasıl çalıştığı hakkında ayrıntılı bilgi için bkz . Microsoft.Identity.Web kaynak kodu .

Gizli istemci uygulaması, istemci gizli dizisi yerine istemci sertifikası veya istemci onayı kullanarak kimliğini de kanıtlayabilir. İstemci onaylarının kullanımı, İstemci onayları bölümünde ayrıntılı olarak yer alan gelişmiş bir senaryodur.

Belirteç önbelleği

Önemli

Web uygulamaları veya web API'leri için belirteç önbelleği uygulaması, genellikle dosya tabanlı olan masaüstü uygulamaları için uygulamadan farklıdır. Güvenlik ve performans nedenleriyle, web uygulamaları ve web API'leri için kullanıcı hesabı başına bir belirteç önbelleği olduğundan emin olmak önemlidir. Her hesap için belirteç önbelleğini seri hale getirmeniz gerekir.

ASP.NET temel öğreticisi, uygulamanızın Startup.cs dosyasında belirteç önbelleği uygulamasına karar vermenize olanak sağlamak için bağımlılık eklemeyi kullanır. Microsoft.Identity.Web, Belirteç önbelleği serileştirmesi bölümünde açıklanan önceden oluşturulmuş belirteç önbelleği serileştiricileriyle birlikte gelir. İlginç bir olasılık ASP.NET Çekirdek dağıtılmış bellek önbelleklerini seçmektir:

// Use a distributed token cache by adding:
    services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAd")
            .EnableTokenAcquisitionToCallDownstreamApi(
                initialScopes: new string[] { "user.read" })
            .AddDistributedTokenCaches();

// Then, choose your implementation.
// For instance, the distributed in-memory cache (not cleared when you stop the app):
services.AddDistributedMemoryCache();

// Or a Redis cache:
services.AddStackExchangeRedisCache(options =>
{
 options.Configuration = "localhost";
 options.InstanceName = "SampleInstance";
});

// Or even a SQL Server token cache:
services.AddDistributedSqlServerCache(options =>
{
 options.ConnectionString = _config["DistCache_ConnectionString"];
 options.SchemaName = "dbo";
 options.TableName = "TestCache";
});

Belirteç önbelleği sağlayıcıları hakkında ayrıntılı bilgi için Microsoft.Identity.Web'in Belirteç önbelleği serileştirme makalesine ve ASP.NET Core web uygulaması öğreticilerine de bakın | Belirteç, web uygulamaları öğreticisinin aşamasını önbelleğe alır.

Sonraki adımlar

Bu noktada, kullanıcı oturum açtığında belirteç, belirteç önbelleğinde depolanır. Şimdi web uygulamasının diğer bölümlerinde nasıl kullanıldığını görelim.

Bu senaryoda bir sonraki makale olan Genel oturum kapatmada hesapları önbellekten kaldırma makalesine geçin.