Dela via


Skapa tjänster som är motståndskraftiga mot Microsoft Entra ID OpenID Anslut metadatauppdatering

Skyddade webb-API:er måste verifiera åtkomsttoken. Webbappar validerar även ID-token. Tokenverifiering har flera delar, kontrollerar om token tillhör programmet, har utfärdats av en betrodd identitetsprovider (IDP), har en livslängd som fortfarande är inom intervallet och inte har manipulerats. Det kan också finnas särskilda valideringar. Appen måste till exempel verifiera signaturen och att signeringsnycklarna (när de är inbäddade i en token) är betrodda och att token inte spelas upp igen. När signeringsnycklarna inte är inbäddade i token måste de hämtas från identitetsprovidern (identifiering eller metadata). Ibland är det också nödvändigt att hämta nycklar dynamiskt vid körning.

Webbappar och webb-API:er måste uppdatera inaktuella OpenID-Anslut metadata för att de ska vara motståndskraftiga. Den här artikeln hjälper dig att få vägledning om hur du uppnår motståndskraftiga appar. Det gäller ASP.NET Core, ASP.NET och Microsoft.IdentityModel.

ASP.NET Core

Använd den senaste versionen av Microsoft.IdentityModel.* och följ riktlinjerna nedan manuellt.

ConfigureServices I metoden för Startup.cs kontrollerar du att JwtBearerOptions.RefreshOnIssuerKeyNotFound det är inställt på sant och att du använder det senaste Microsoft.IdentityModel.* -biblioteket. Den här egenskapen ska vara aktiverad som standard.

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

ASP.NET/ OWIN

Microsoft rekommenderar att du flyttar till ASP.NET Core eftersom utvecklingen har upphört att ASP.NET.

Om du använder ASP.NET (klassisk) använder du den senaste Microsoft.IdentityModel.*.

OWIN har ett automatiskt 24-timmars uppdateringsintervall för OpenIdConnectConfiguration. Den här uppdateringen utlöses endast om en begäran tas emot efter att tidsperioden på 24 timmar har passerat. Såvitt vi vet finns det inget sätt att ändra det här värdet eller utlösa en uppdatering tidigt, förutom att starta om programmet.

Microsoft.IdentityModel

Om du verifierar din token själv, till exempel i en Azure-funktion, använder du den senaste versionen av Microsoft.IdentityModel.* och följer metadatavägledningen som illustreras av kodfragmenten nedan.

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ästa steg

Mer information finns i tokenverifiering i ett skyddat webb-API