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.
Rekommenderad åtgärd
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) tilltrue
. Genom att ange egenskapen tilltrue
fortsätter autentiseringshanterare att användaJwtTokenValidators
och fortsätter att produceraJwtSecurityToken
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
- Microsoft.AspNetCore.Authentication.WsFederation.SecurityTokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.JwtBearer.TokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.OpenIdConnect.TokenValidatedContext.SecurityToken
- AuthorizationCodeReceivedContext.SecurityToken