Partager via


Les événements relatifs aux jetons de sécurité retournent un JsonWebToken

Les événements JwtBearerEvents, WsFederationEvents, et OpenIdConnectEvents sont des événements d'authentification déclenchés respectivement par les gestionnaires d’authentification JwtBearer, WsFederation, et OpenIdConnect. Par exemple, l’événement OnTokenValidated est déclenché lorsqu’un jeton de sécurité est validé. Ces événements sont déclenchés avec un contexte (par exemple) TokenValidatedContextqui expose une TokenValidatedContext.SecurityToken propriété de type SecurityTokenabstrait. L'implémentation réelle par défaut de TokenValidatedContext.SecurityToken a été modifiée de System.IdentityModel.Tokens.Jwt.JwtSecurityToken à JsonWebToken.

Version introduite

ASP.NET Core 8.0 Preview 7

Comportement précédent

Auparavant, les propriétés SecurityToken affectées étaient implémentées par System.IdentityModel.Tokens.Jwt.JwtSecurityToken, qui dérive de SecurityToken. JwtSecurityToken est l'implémentation précédente de JSON Web Token (JWT). Les JwtSecurityToken jetons ont été produits par SecurityTokenValidators.

En outre, le JwtSecurityTokenHandler.DefaultInboundClaimTypeMap champ a fourni le mappage de type de revendication par défaut pour les revendications entrantes.

Nouveau comportement

À partir de ASP.NET Core 8.0, la Microsoft.IdentityModel.JsonWebTokens classe, qui dérive également de SecurityToken, implémente les SecurityToken propriétés, par défaut. Microsoft.IdentityModel.JsonWebTokens Les jetons sont générés par des gestionnaires plus optimisés TokenHandler .

En outre, le JsonWebTokenHandler.DefaultInboundClaimTypeMap champ fournit le mappage de type de revendication par défaut pour les revendications entrantes.

Type de changement cassant

Ce changement est un changement de comportement.

Raison de la modification

Cette modification a été apportée, car JsonWebToken (et son associé JsonWebTokenHandler) apportent les avantages suivants :

  • Amélioration des performances de 30 %.
  • Amélioration de la fiabilité à l’aide d’une métadonnée « dernière bonne connue » (comme OpenIdConnectMetadata, par exemple).
  • Traitement asynchrone.

Pour la plupart des utilisateurs, cette modification ne doit pas être un problème, car le type des propriétés (SecurityToken) n’a pas changé, et vous n’avez pas été censé examiner le type réel.

Toutefois, si vous deviez rétroconvertir l’une des propriétés SecurityToken concernées à JwtSecurityToken (par exemple, pour obtenir les revendications), vous avez deux options :

  • Rétroconvertir la propriété vers JsonWebToken :

    service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => {
        options.Events.OnTokenValidated = (context) => {
            // Replace your cast to JwtSecurityToken.
            JsonWebToken token = context.SecurityToken as JsonWebToken;
            // Do something ...
        };
    });
    
  • Définissez l’une des UseSecurityTokenValidators propriétés booléennes sur les options correspondantes (JwtBearerOptions, WsFederationOptionsou OpenIdConnectOptions) sur true. En définissant la propriété true, les gestionnaires d’authentification continueront d’utiliser JwtTokenValidators et continueront de produire des jetons JwtSecurityToken.

    service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme,  options => {
        options.UseSecurityTokenValidators = true;
        options.Events.OnTokenValidated = (context) => {
            // As you were doing before
            JwtSecurityToken token = context.SecurityToken as JwtSecurityToken;
            // Do something ...
        };
    });
    

API affectées