Delen via


Services bouwen die bestand zijn tegen het vernieuwen van metagegevens van Microsoft Entra ID OpenID Verbinding maken

Beveiligde web-API's moeten toegangstokens valideren. Web-apps valideren ook de id-tokens. Tokenvalidatie heeft meerdere onderdelen, waarbij wordt gecontroleerd of het token deel uitmaakt van de toepassing, is uitgegeven door een vertrouwde id-provider (IDP), een levensduur heeft die nog steeds binnen het bereik valt en waarmee niet is geknoeid. Er kunnen ook speciale validaties zijn. De app moet bijvoorbeeld de handtekening valideren en dat ondertekeningssleutels (wanneer ingesloten in een token) worden vertrouwd en dat het token niet opnieuw wordt afgespeeld. Wanneer de ondertekeningssleutels niet zijn ingesloten in het token, moeten ze worden opgehaald van de id-provider (detectie of metagegevens). Soms is het ook nodig om sleutels dynamisch te verkrijgen tijdens runtime.

Web-apps en web-API's moeten verlopen OpenID vernieuwen Verbinding maken metagegevens zodat ze tolerant zijn. In dit artikel wordt uitgelegd hoe u tolerante apps kunt bereiken. Dit geldt voor ASP.NET Core, ASP.NET en Microsoft.IdentityModel.

ASP.NET Core

Gebruik de nieuwste versie van Microsoft.IdentityModel.* en volg de onderstaande richtlijnen handmatig.

Controleer in de ConfigureServices methode van de Startup.cs of deze JwtBearerOptions.RefreshOnIssuerKeyNotFound is ingesteld op waar en of u de nieuwste Microsoft.IdentityModel.*-bibliotheek gebruikt. Deze eigenschap moet standaard zijn ingeschakeld.

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

ASP.NET/ OWIN

Microsoft raadt u aan over te stappen op ASP.NET Core, omdat de ontwikkeling is gestopt op ASP.NET.

Als u ASP.NET (klassiek) gebruikt, gebruikt u het nieuwste Microsoft.IdentityModel.*.

OWIN heeft een automatisch vernieuwingsinterval van 24 uur voor de OpenIdConnectConfiguration. Deze vernieuwing wordt alleen geactiveerd als een aanvraag wordt ontvangen nadat de periode van 24 uur is verstreken. Voor zover we weten, is er geen manier om deze waarde te wijzigen of een vernieuwing vroeg te activeren, afgezien van het opnieuw opstarten van de toepassing.

Microsoft.IdentityModel

Als u uw token zelf valideert, bijvoorbeeld in een Azure-functie, gebruikt u de nieuwste versie van Microsoft.IdentityModel.* en volgt u de richtlijnen voor metagegevens die worden geïllustreerd door de onderstaande codefragmenten.

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

Volgende stappen

Zie tokenvalidatie in een beveiligde web-API voor meer informatie