Zdarzenia tokenu zabezpieczającego zwracają token JsonWebToken
Zdarzenia JwtBearerEvents, WsFederationEventsi OpenIdConnectEvents to zdarzenia uwierzytelniania wyzwalane odpowiednio przez programy obsługi uwierzytelniania JwtBearer, WsFederation i OpenId Połączenie. Na przykład OnTokenValidated zdarzenie jest uruchamiane po zweryfikowaniu tokenu zabezpieczającego. Te zdarzenia są wyzwalane przy użyciu kontekstu (na przykład TokenValidatedContext), który uwidacznia TokenValidatedContext.SecurityToken właściwość typu SecurityTokenabstrakcyjnego . Domyślna rzeczywista implementacja funkcji została zmieniona TokenValidatedContext.SecurityToken z JwtSecurityToken na JsonWebToken.
Wprowadzona wersja
ASP.NET Core 8.0 (wersja zapoznawcza 7)
Poprzednie zachowanie
Wcześniej właściwości, których dotyczy problem SecurityToken
, zostały zaimplementowane przez JwtSecurityTokenelement , który pochodzi z klasy SecurityToken. JwtSecurityToken jest poprzednią generacją implementacji tokenu internetowego JSON (JWT). Tokeny JwtSecurityToken zostały wygenerowane przez program SecurityTokenValidators.
Ponadto JwtSecurityTokenHandler.DefaultInboundClaimTypeMap pole dostarczyło domyślne mapowanie typu oświadczenia dla oświadczeń przychodzących.
Nowe zachowanie
Począwszy od ASP.NET Core 8.0, Microsoft.IdentityModel.JsonWebTokens klasa, która również pochodzi z SecurityToken, implementuje SecurityToken
właściwości domyślnie. Microsoft.IdentityModel.JsonWebTokens tokeny są generowane przez bardziej zoptymalizowane TokenHandler procedury obsługi.
Ponadto JsonWebTokenHandler.DefaultInboundClaimTypeMap pole zawiera domyślne mapowanie typu oświadczenia dla oświadczeń przychodzących.
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Ta zmiana została wprowadzona, ponieważ JsonWebToken (i skojarzone z JsonWebTokenHandlernią ) przynoszą następujące korzyści:
- 30% poprawa wydajności.
- Ulepszono niezawodność przy użyciu metadanych "ostatniego znanego dobrego" (na przykład
OpenIdConnectMetadata
). - Przetwarzanie asynchroniczne.
Zalecana akcja
W przypadku większości użytkowników ta zmiana nie powinna być problemem, ponieważ typ właściwości (SecurityToken) nie został zmieniony i nie trzeba było patrzeć na rzeczywisty typ.
Jeśli jednak jedna z właściwości, których dotyczy SecurityToken
JwtSecurityToken
problem, została wyłączona (na przykład w celu uzyskania oświadczeń), masz dwie opcje:
Rzutowanie właściwości w dół na
JsonWebToken
:service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => { options.Events.OnTokenValidated = (context) => { // Replace your cast to JwtSecurityToken. JsonWebToken token = context.SecurityToken as JsonWebToken; // Do something ... }; });
Ustaw jedną z
UseSecurityTokenValidators
właściwości logicznych odpowiednich opcji (JwtBearerOptions, WsFederationOptions, lub OpenIdConnectOptions) natrue
wartość . Ustawiając właściwość natrue
, programy obsługi uwierzytelniania będą nadal używaćJwtTokenValidators
i będą nadal tworzyćJwtSecurityToken
tokeny.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 ... }; });
Dotyczy interfejsów API
- Microsoft.AspNetCore.Authentication.WsFederation.SecurityTokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.JwtBearer.TokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.OpenIdConnect.TokenValidatedContext.SecurityToken
- AuthorizationCodeReceivedContext.SecurityToken