Os eventos de token de autenticação retornam um JsonWebToken
Os eventos JwtBearerEvents, WsFederationEvents e OpenIdConnectEvents são eventos de autenticação disparados respectivamente pelos manipuladores de autenticação JwtBearer, WsFederation e OpenIdConnect. Por exemplo, o evento OnTokenValidated é disparado quando um token de segurança é validado. Esses eventos são disparados com um contexto (por exemplo, TokenValidatedContext) que expõe uma propriedade TokenValidatedContext.SecurityToken do tipo abstrato SecurityToken. A implementação real padrão de TokenValidatedContext.SecurityToken mudou de JwtSecurityToken para JsonWebToken.
Versão introduzida
ASP.NET Core 8.0 Versão Prévia 7
Comportamento anterior
Anteriormente, as propriedades SecurityToken
afetadas eram implementadas por JwtSecurityToken, que deriva de SecurityToken. JwtSecurityToken é a geração anterior da implementação do Token Web JSON (JWT). Os tokens JwtSecurityToken eram produzidos por SecurityTokenValidators.
Além disso, o campo JwtSecurityTokenHandler.DefaultInboundClaimTypeMap forneceu o mapeamento padrão do tipo de declaração para declarações de entrada.
Novo comportamento
A partir do ASP.NET Core 8.0, por padrão, a classe Microsoft.IdentityModel.JsonWebTokens, que também é derivada de SecurityToken, implementa as propriedades SecurityToken
. Os tokens Microsoft.IdentityModel.JsonWebTokens são produzidos por manipuladores TokenHandler mais otimizados.
Além disso, o campo JsonWebTokenHandler.DefaultInboundClaimTypeMap fornece o mapeamento padrão do tipo de declaração para declarações de entrada.
Tipo de alteração interruptiva
Esta é uma alteração comportamental.
Motivo da alteração
Essa mudança foi feita porque JsonWebToken (e o JsonWebTokenHandler associado) trazem os seguintes benefícios:
- 30% de aprimoramento do desempenho.
- Maior confiabilidade com o uso dos “últimos válidos e conhecidos” metadados (como
OpenIdConnectMetadata
). - Processamento assíncrono.
Ação recomendada
Para a maioria dos usuários, essa alteração não deve ser um problema, pois o tipo das propriedades (SecurityToken) não foi alterado, e você não deverá examinar o tipo real.
No entanto, se você estiver fazendo o downcast de uma das propriedades SecurityToken
afetadas para JwtSecurityToken
(por exemplo, para obter as declarações), há duas opções:
Fazer o downcast da propriedade para
JsonWebToken
:service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => { options.Events.OnTokenValidated = (context) => { // Replace your cast to JwtSecurityToken. JsonWebToken token = context.SecurityToken as JsonWebToken; // Do something ... }; });
Definir uma das propriedades boolianas
UseSecurityTokenValidators
nas opções correspondentes (JwtBearerOptions, WsFederationOptions ou OpenIdConnectOptions) comotrue
. Ao definir a propriedade comotrue
, os manipuladores de autenticação continuarão usandoJwtTokenValidators
e produzindo 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 ... }; });
APIs afetadas
- Microsoft.AspNetCore.Authentication.WsFederation.SecurityTokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.JwtBearer.TokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.OpenIdConnect.TokenValidatedContext.SecurityToken
- AuthorizationCodeReceivedContext.SecurityToken