Partage 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 dans un contexte (par exemple, TokenValidatedContext) qui expose une propriété TokenValidatedContext.SecurityToken de type abstract SecurityToken. L’implémentation réelle par défaut de TokenValidatedContext.SecurityToken est passée de JwtSecurityToken à JsonWebToken.

Version introduite

ASP.NET Core 8.0 préversion 7

Comportement précédent

Auparavant, les propriétés SecurityToken affectées étaient implémentées par JwtSecurityToken, qui dérive de SecurityToken. JwtSecurityToken est la génération précédente de l’implémentation JSON Web Token (JWT). Les jetons JwtSecurityToken ont été produits par SecurityTokenValidators.

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

Nouveau comportement

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

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

Type de changement cassant

Ce changement est un changement de comportement.

Raison du changement

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

  • Amélioration de 30% des performances.
  • Amélioration de la fiabilité à l’aide d’une métadonnée « dernière bonne connue » (par exemple, OpenIdConnectMetadata).
  • 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’étiez pas censé voir le type réel.

Toutefois, si vous souhaitez forcer le type de l’une des propriétés SecurityToken affectées et le passer sur JwtSecurityToken (par exemple, pour obtenir les revendications), vous avez deux options :

  • Forcer le type de la propriété sur 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 propriétés booléennes UseSecurityTokenValidators des options correspondantes (JwtBearerOptions, WsFederationOptionsou OpenIdConnectOptions) sur true. En définissant la propriété sur true, les gestionnaires d’authentification continuent à utiliser JwtTokenValidators et à 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