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.

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) como true. Ao definir a propriedade como true, os manipuladores de autenticação continuarão usando JwtTokenValidators e produzindo tokens 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 ...
        };
    });
    

APIs afetadas