Partilhar via


Os eventos de token de segurança retornam um JsonWebToken

Os JwtBearerEventseventos , WsFederationEvents, e são OpenIdConnectEvents eventos de autenticação disparados respectivamente pelos manipuladores de autenticação JwtBearer, WsFederation e OpenIdConnect . Por exemplo, o evento é disparado OnTokenValidated quando um token de segurança é validado. Esses eventos são disparados com um contexto (por exemplo, TokenValidatedContext) que expõe uma TokenValidatedContext.SecurityToken propriedade de tipo SecurityTokenabstrato. A implementação real padrão de TokenValidatedContext.SecurityToken alterado de JwtSecurityToken para JsonWebToken.

Versão introduzida

ASP.NET Core 8.0 Preview 7

Comportamento anterior

Anteriormente, as propriedades afetadas SecurityToken foram implementadas pela JwtSecurityToken, que deriva de SecurityToken. JwtSecurityToken é a geração anterior da implementação do JSON Web Token (JWT). Os JwtSecurityToken tokens foram produzidos pela SecurityTokenValidators.

Além disso, o JwtSecurityTokenHandler.DefaultInboundClaimTypeMap campo forneceu o mapeamento de tipo de declaração padrão para declarações de entrada.

Novo comportamento

A partir do ASP.NET Core 8.0, a Microsoft.IdentityModel.JsonWebTokens classe, que também deriva de SecurityToken, implementa as SecurityToken propriedades, por padrão. Microsoft.IdentityModel.JsonWebTokens Os tokens são produzidos por manipuladores mais otimizados TokenHandler .

Além disso, o JsonWebTokenHandler.DefaultInboundClaimTypeMap campo fornece o mapeamento de tipo de declaração padrão para declarações de entrada.

Tipo de mudança de rutura

Esta mudança é uma mudança comportamental.

Razão para a alteração

Esta alteração foi feita porque JsonWebToken (e os que lhe estão associados JsonWebTokenHandler) trazem os seguintes benefícios:

  • 30% de melhoria de desempenho.
  • Maior confiabilidade usando metadados do "último bem conhecido" (como OpenIdConnectMetadata).
  • Processamento assíncrono.

Para a maioria dos usuários, essa alteração não deve ser um problema, pois o tipo de propriedades (SecurityToken) não foi alterado e você não deveria olhar para o tipo real.

No entanto, se você estava fazendo downcast de uma das propriedades afetadas SecurityToken para JwtSecurityToken (por exemplo, para obter as reivindicações), você tem duas opções:

  • Down-cast a 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 ...
        };
    });
    
  • Defina uma das UseSecurityTokenValidators propriedades booleanas 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 continuarão produzindo JwtSecurityToken tokens.

    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