Dela via


Säkerhetstokenhändelser returnerar en JsonWebToken

Händelserna JwtBearerEvents, WsFederationEventsoch OpenIdConnectEvents är autentiseringshändelser som utlöses av JwtBearer, WsFederation och OpenId Anslut autentiseringshanterare. Händelsen utlöses till exempel OnTokenValidated 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 JwtSecurityToken till JsonWebToken.

Version introducerad

ASP.NET Core 8.0 Förhandsversion 7

Tidigare beteende

Tidigare implementerades de berörda SecurityToken egenskaperna av 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 Microsoft.IdentityModel.JsonWebTokens implementerar SecurityToken klassen, som också härleds från SecurityToken, egenskaperna som standard. 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 icke-bakåtkompatibel ändring

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

Orsak till ändringen

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 var nedgjuten en 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