Aracılığıyla paylaş


Microsoft Entra ID OpenID Bağlan meta veri yenilemeye dayanıklı hizmetler oluşturma

Korumalı web API'lerinin erişim belirteçlerini doğrulaması gerekir. Web uygulamaları kimlik belirteçlerini de doğrular. Belirteç Doğrulama, belirtecin uygulamaya ait olup olmadığını denetleyerek, güvenilir bir Kimlik Sağlayıcısı (IDP) tarafından verilmiş olup olmadığını denetleyerek, hala aralıkta olan ve üzerinde oynanmamış bir yaşam süresine sahip olan birden çok bölüme sahiptir. Özel doğrulamalar da olabilir. Örneğin, uygulamanın imzayı ve imzalama anahtarlarının (belirteç içine eklendiğinde) güvenilir olduğunu ve belirtecin yeniden oynatılmadığını doğrulaması gerekir. İmzalama anahtarları belirteçte eklenmediğinde, kimlik sağlayıcısından (Bulma veya Meta Veriler) getirilmeleri gerekir. Bazen anahtarları çalışma zamanında dinamik olarak almak da gerekir.

Web uygulamalarının ve web API'lerinin dayanıklı olması için eski OpenID Bağlan meta verilerini yenilemesi gerekir. Bu makale, dayanıklı uygulamalar elde etme konusunda kılavuza yardımcı olur. ASP.NET Core, ASP.NET ve Microsoft.IdentityModel için geçerlidir.

ASP.NET Core

Microsoft.IdentityModel.* uygulamasının en son sürümünü kullanın ve aşağıdaki yönergeleri el ile izleyin.

ConfigureServices Startup.cs yönteminde true olarak ayarlandığından JwtBearerOptions.RefreshOnIssuerKeyNotFound ve en son Microsoft.IdentityModel.* kitaplığını kullandığınızdan emin olun. Bu özellik varsayılan olarak etkinleştirilmelidir.

services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
    …
    // shouldn’t be necessary as it’s true by default
    options.RefreshOnIssuerKeyNotFound = true;
    …
});

ASP.NET/ OWIN

Geliştirme ASP.NET durdurulduğu için Microsoft, ASP.NET Core'a geçmenizi önerir.

ASP.NET (Klasik) kullanıyorsanız en son Microsoft.IdentityModel.* kullanın.

OWIN için otomatik 24 saatlik yenileme aralığı vardır OpenIdConnectConfiguration. Bu yenileme yalnızca 24 saatlik süre geçtikten sonra bir istek alındığında tetiklenir. Bildiğimiz kadarıyla, uygulamayı yeniden başlatmak dışında bu değeri değiştirmenin veya yenilemeyi erken tetiklemenin bir yolu yoktur.

Microsoft.IdentityModel

Belirtecinizi kendiniz doğrularsanız, örneğin bir Azure İşlevi'nde Microsoft.IdentityModel.* dosyasının en son sürümünü kullanın ve aşağıdaki kod parçacıkları tarafından gösterilen meta veri kılavuzunu izleyin.

var configManager =
  new ConfigurationManager<OpenIdConnectConfiguration>(
    "http://someaddress.com",
    new OpenIdConnectConfigurationRetriever());

var config = await configManager.GetConfigurationAsync().ConfigureAwait(false);
var validationParameters = new TokenValidationParameters()
{
  …
  IssuerSigningKeys = config.SigningKeys;
  …
}

var tokenHandler = new JsonWebTokenHandler();
result = Handler.ValidateToken(jwtToken, validationParameters);
if (result.Exception != null && result.Exception is SecurityTokenSignatureKeyNotFoundException)
{
  configManager.RequestRefresh();
  config = await configManager.GetConfigurationAsync().ConfigureAwait(false);
  validationParameters = new TokenValidationParameters()
  {
    …
    IssuerSigningKeys = config.SigningKeys,
    …
  };

  // attempt to validate token again after refresh
  result = Handler.ValidateToken(jwtToken, validationParameters);
}

Sonraki adımlar

Daha fazla bilgi edinmek için bkz. Korumalı web API'sinde belirteç doğrulama