Creare servizi resilienti all'aggiornamento openID di Microsoft Entra ID Connessione metadati

Le API Web protette devono convalidare i token di accesso. Le app Web convalidano anche i token ID. La convalida dei token ha più parti, verificando se il token appartiene all'applicazione, è stato emesso da un provider di identità attendibile (IDP), ha una durata ancora in intervallo e non è stata manomessa. Possono essere presenti anche convalide speciali. Ad esempio, l'app deve convalidare la firma e che le chiavi di firma (quando incorporate in un token) sono attendibili e che il token non viene riprodotto. Quando le chiavi di firma non sono incorporate nel token, devono essere recuperate dal provider di identità (individuazione o metadati). A volte è anche necessario ottenere le chiavi in modo dinamico in fase di esecuzione.

Le app Web e le API Web devono aggiornare i metadati OpenID non aggiornati Connessione affinché siano resilienti. Questo articolo illustra come ottenere app resilienti. Si applica a ASP.NET Core, ASP.NET e Microsoft.IdentityModel.

ASP.NET Core

Usare la versione più recente di Microsoft.IdentityModel.* e seguire manualmente le linee guida seguenti.

ConfigureServices Nel metodo del Startup.cs assicurarsi che JwtBearerOptions.RefreshOnIssuerKeyNotFound sia impostato su true e che si stia usando la libreria Microsoft.IdentityModel.* più recente. Questa proprietà deve essere abilitata per impostazione predefinita.

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

ASP.NET/ OWIN

Microsoft consiglia di passare a ASP.NET Core, perché lo sviluppo è stato interrotto in ASP.NET.

Se si usa ASP.NET (versione classica), usare la versione più recente di Microsoft.IdentityModel.*.

OWIN ha un intervallo di aggiornamento automatico di 24 ore per .OpenIdConnectConfiguration Questo aggiornamento verrà attivato solo se una richiesta viene ricevuta dopo il superamento dell'intervallo di tempo di 24 ore. Per quanto sappiamo, non è possibile modificare questo valore o attivare un aggiornamento in anticipo, a parte il riavvio dell'applicazione.

Microsoft.IdentityModel

Se si convalida il token manualmente, ad esempio in una funzione di Azure, usare la versione più recente di Microsoft.IdentityModel.* e seguire le indicazioni sui metadati illustrate dai frammenti di codice seguenti.

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

Passaggi successivi

Per altre informazioni, vedere Convalida dei token in un'API Web protetta