Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zdarzenia JwtBearerEvents, WsFederationEventsi OpenIdConnectEvents to zdarzenia uwierzytelniania wyzwalane odpowiednio przez programy obsługi uwierzytelniania JwtBearer, WsFederation i OpenIdConnect . 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 właściwość TokenValidatedContext.SecurityToken typu abstrakcyjnego SecurityToken. Domyślna rzeczywista implementacja została zmieniona z TokenValidatedContext.SecurityToken na System.IdentityModel.Tokens.Jwt.JwtSecurityToken.
Wersja wprowadzona
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 element System.IdentityModel.Tokens.Jwt.JwtSecurityToken, 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 przełamującej
Ta zmiana jest zmianą behawioralną.
Przyczyna zmiany
Ta zmiana została wprowadzona, ponieważ JsonWebToken (i skojarzone z JsonWebTokenHandler) przynoszą następujące korzyści:
- Poprawa wydajności o 30%.
- Niezawodność została poprawiona dzięki wykorzystaniu metadanych ostatniego dobrego stanu (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 uległ zmianie i nie należało przyjrzeć się rzeczywistemu typowi.
Jednakże, jeśli jedna z dotkniętych SecurityToken właściwości była rzutowana w dół na JwtSecurityToken (na przykład, aby uzyskać roszczenia), 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 właściwości logicznych opcji (
UseSecurityTokenValidators, JwtBearerOptions lub WsFederationOptions) na wartość OpenIdConnectOptions. Ustawiając właściwość natrue, programy obsługi uwierzytelniania będą nadal używaćJwtTokenValidatorsi będą nadal tworzyćJwtSecurityTokentokeny.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 ... }; });
Interfejsy API, których dotyczy problem
- Microsoft.AspNetCore.Authentication.WsFederation.SecurityTokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.JwtBearer.TokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.OpenIdConnect.TokenValidatedContext.SecurityToken
- AuthorizationCodeReceivedContext.SecurityToken