Dela via


Säkerhetstoken-händelser returnerar en JsonWebToken

Händelserna JwtBearerEvents, WsFederationEventsoch OpenIdConnectEvents är autentiseringshändelser som utlöses av JwtBearer, WsFederation och OpenIdConnect-autentiseringshanterare . Till exempel triggas OnTokenValidated-händelsen när en säkerhetstoken verifieras. Dessa händelser utlöses med en kontext (till exempel TokenValidatedContext) som exponerar en TokenValidatedContext.SecurityToken egenskap av abstrakt typ SecurityToken. Den faktiska standardimplementeringen av TokenValidatedContext.SecurityToken ändrades från System.IdentityModel.Tokens.Jwt.JwtSecurityToken till JsonWebToken.

Version lanserad

ASP.NET Core 8.0 Förhandsversion 7

Tidigare beteende

Tidigare implementerades de berörda SecurityToken egenskaperna av System.IdentityModel.Tokens.Jwt.JwtSecurityToken, som härleds från SecurityToken. JwtSecurityToken är den tidigare generationens JSON-webbtokenimplementering (JWT). Token JwtSecurityToken skapades av SecurityTokenValidators.

Dessutom angav fältet JwtSecurityTokenHandler.DefaultInboundClaimTypeMap standardmappning av anspråkstyp för inkommande anspråk.

Nytt beteende

Från och med ASP.NET Core 8.0, implementerar Microsoft.IdentityModel.JsonWebTokens-klassen, som också härleds från SecurityToken, SecurityToken-egenskaperna som standardinställning. Microsoft.IdentityModel.JsonWebTokens token skapas av mer optimerade TokenHandler hanterare.

Dessutom tillhandahåller fältet JsonWebTokenHandler.DefaultInboundClaimTypeMap standardmappning av anspråkstyp för inkommande anspråk.

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

Den här ändringen gjordes eftersom JsonWebToken (och dess associerade JsonWebTokenHandler) medför följande fördelar:

  • 30% prestandaförbättring.
  • Förbättrad tillförlitlighet med hjälp av "senast kända bra" metadata (till exempel OpenIdConnectMetadata).
  • Asynkron bearbetning

För de flesta användare bör den här ändringen inte vara ett problem eftersom typen av egenskaper (SecurityToken) inte har ändrats och du inte skulle titta på den verkliga typen.

Men om du nedkonverterade någon av de berörda SecurityToken egenskaperna till JwtSecurityToken (till exempel för att hämta anspråken) har du två alternativ:

  • Lägg ned egenskapen till JsonWebToken:

    service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => {
        options.Events.OnTokenValidated = (context) => {
            // Replace your cast to JwtSecurityToken.
            JsonWebToken token = context.SecurityToken as JsonWebToken;
            // Do something ...
        };
    });
    
  • Ange en av de UseSecurityTokenValidators booleska egenskaperna för motsvarande alternativ (JwtBearerOptions, WsFederationOptionseller OpenIdConnectOptions) till true. Genom att ange egenskapen till truefortsätter autentiseringshanterare att använda JwtTokenValidators och fortsätter att producera JwtSecurityToken token.

    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 ...
        };
    });
    

Berörda API:er