Udostępnij za pośrednictwem


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.

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) na truewartość . Ustawiając właściwość na true, 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