Freigeben über


Erstellen von Diensten, die gegenüber der Aktualisierung der OpenID Connect-Metadaten von Microsoft Entra ID resilient sind

Geschützte Web-APIs müssen Zugriffstoken überprüfen. Web-Apps überprüfen auch die ID-Token. Die Token-Validierung besteht aus mehreren Teilen, wobei geprüft wird, ob das Token zur Anwendung gehört, von einem vertrauenswürdigen Identitätsanbieter (IDP) ausgestellt wurde, eine noch gültige Lebensdauer hat und nicht manipuliert wurde. Es können auch spezielle Validierungen vorliegen. Zum Beispiel muss die App die Signatur validieren und sicherstellen, dass Signierschlüssel (wenn sie in einem Token eingebettet sind) vertrauenswürdig sind und dass das Token nicht wiedergegeben wird. Wenn die Signaturschlüssel nicht in das Token eingebettet sind, müssen sie vom Identitätsanbieter (Discovery oder Metadaten) abgerufen werden. Manchmal ist es auch erforderlich, Schlüssel dynamisch zur Ausführungszeit abzurufen.

Web-Apps und Web-APIs müssen veraltete OpenID Connect Metadaten aktualisieren, damit sie robust sind. Dieser Artikel enthält Anleitungen zum Erzielen robuster Apps. Dies gilt für ASP.NET Core, ASP.NET und Microsoft.IdentityModel.

ASP.NET Core

Verwenden Sie die neueste Version des Microsoft.IdentityModel.* und befolgen Sie manuell die folgenden Richtlinien.

Stellen Sie in der ConfigureServicesMethode der Datei Startup.cs sicher, dassJwtBearerOptions.RefreshOnIssuerKeyNotFound diese auf wahr gesetzt ist, und dass Sie die neueste Microsoft.IdentityModel.*-Bibliothek verwenden. Diese Eigenschaft sollte standardmäßig aktiviert sein.

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

ASP.NET/OWIN

Microsoft empfiehlt, dass Sie auf ASP.NET Core umsteigen, da die Entwicklung von ASP.NET eingestellt wurde.

Wenn Sie ASP.NET (Classic) verwenden, sollten Sie das aktuellste Microsoft.IdentityModel.* verwenden.

OWIN bietet ein automatisches Aktualisierungsintervall von 24 Stunden für den OpenIdConnectConfiguration. Diese Aktualisierung wird nur ausgelöst, wenn eine Anforderung nach Ablauf der 24-Stunden-Zeitspanne empfangen wird. Soweit uns bekannt ist, besteht keine Möglichkeit, diesen Wert zu ändern oder eine vorzeitige Aktualisierung auszulösen, abgesehen von einem Neustart der Anwendung.

Microsoft.IdentityModel

Wenn Sie Ihr Token selbst validieren, z. B. in einer Azure-Funktion, verwenden Sie die aktuellste Version von Microsoft.IdentityModel.* und befolgen Sie die Anleitung für Metadaten, die in den folgenden Codeschnipseln dargestellt ist.

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);
}

Nächste Schritte

Weitere Informationen finden Sie unter Token-Validierung in einer geschützten Web-API