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.
Action recommandée
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) surtrue
. En définissant la propriété surtrue
, les gestionnaires d’authentification continuent à utiliserJwtTokenValidators
et à produire des jetonsJwtSecurityToken
.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
- Microsoft.AspNetCore.Authentication.WsFederation.SecurityTokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.JwtBearer.TokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.OpenIdConnect.TokenValidatedContext.SecurityToken
- AuthorizationCodeReceivedContext.SecurityToken