Los eventos de token de seguridad devuelven un JsonWebToken
JwtBearerEvents, WsFederationEvents y OpenIdConnectEvents son eventos de autenticación desencadenados respectivamente por los controladores de autenticación JwtBearer, WsFederation y OpenIdConnect. Por ejemplo, el evento OnTokenValidated se desencadena cuando se valida un token de seguridad. Estos eventos se desencadenan con un contexto (por ejemplo, TokenValidatedContext) que expone una propiedad TokenValidatedContext.SecurityToken de tipo abstracto SecurityToken. La implementación real predeterminada de TokenValidatedContext.SecurityToken se ha cambiado de JwtSecurityToken a JsonWebToken.
Versión introducida
ASP.NET Core 8.0 Versión preliminar 7
Comportamiento anterior
Anteriormente, las propiedades de SecurityToken
afectadas las implementaba JwtSecurityToken, que deriva de SecurityToken. JwtSecurityToken es la generación anterior de la implementación de JSON Web Token (JWT). Los tokens JwtSecurityToken se generaban con SecurityTokenValidators.
Además, el campo JwtSecurityTokenHandler.DefaultInboundClaimTypeMap proporcionaba la asignación de tipos de notificación predeterminada para las notificaciones entrantes.
Comportamiento nuevo
A partir de ASP.NET Core 8.0, la clase Microsoft.IdentityModel.JsonWebTokens, que también se deriva de SecurityToken, implementa las propiedades SecurityToken
de forma predeterminada. Los tokens Microsoft.IdentityModel.JsonWebTokens los generan controladores TokenHandler más optimizados.
Además, el campo JsonWebTokenHandler.DefaultInboundClaimTypeMap proporciona la asignación de tipos de notificación predeterminada para las notificaciones entrantes.
Tipo de cambio importante
Este es un cambio de comportamiento.
Motivo del cambio
Este cambio se ha realizado porque JsonWebToken (y su JsonWebTokenHandler asociado) aportan las siguientes ventajas:
- Mejora del rendimiento en un 30 %.
- Mayor confiabilidad gracias al uso de metadatos de tipo "última configuración correcta conocida" (por ejemplo,
OpenIdConnectMetadata
). - Procesamiento asincrónico.
Acción recomendada
Para la mayoría de los usuarios, este cambio no debería ser un problema, ya que el tipo de las propiedades (SecurityToken) no ha cambiado y se supone que no tiene que ver el tipo real.
Sin embargo, si estaba convirtiendo una de las propiedades SecurityToken
afectadas en JwtSecurityToken
(por ejemplo, para obtener las notificaciones), tiene dos opciones:
Convertir la propiedad en
JsonWebToken
:service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => { options.Events.OnTokenValidated = (context) => { // Replace your cast to JwtSecurityToken. JsonWebToken token = context.SecurityToken as JsonWebToken; // Do something ... }; });
Establecer una de las propiedades
UseSecurityTokenValidators
booleanas de las opciones correspondientes (JwtBearerOptions, WsFederationOptions o OpenIdConnectOptions) entrue
. Al establecer la propiedad entrue
, los controladores de autenticación seguirán usandoJwtTokenValidators
y produciendo tokensJwtSecurityToken
.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 afectadas
- Microsoft.AspNetCore.Authentication.WsFederation.SecurityTokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.JwtBearer.TokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.OpenIdConnect.TokenValidatedContext.SecurityToken
- AuthorizationCodeReceivedContext.SecurityToken