セキュリティ トークン イベントが JsonWebToken を返す
JwtBearerEvents、WsFederationEvents、OpenIdConnectEvents イベントは、それぞれ、JwtBearer、WsFederation、OpenIdConnect 認証ハンドラーによって発生する認証イベントです。 たとえば、セキュリティ トークンが検証されると、OnTokenValidated イベントが発生します。 これらのイベントは、抽象型 SecurityToken の TokenValidatedContext.SecurityToken プロパティを公開するコンテキスト (たとえば、TokenValidatedContext) で発生します。 TokenValidatedContext.SecurityToken の既定の実際の実装が JwtSecurityToken から JsonWebToken に変更されました。
導入されたバージョン
ASP.NET Core 8.0 Preview 7
以前の動作
以前は、影響を受ける SecurityToken
プロパティは、SecurityToken から派生した JwtSecurityToken によって実装されていました。 JwtSecurityToken は、JSON Web トークン (JWT) 実装の前の世代です。 JwtSecurityToken トークンは SecurityTokenValidators によって生成されていました。
さらに、JwtSecurityTokenHandler.DefaultInboundClaimTypeMap フィールドにより、受信要求の既定の要求の種類のマッピングが提供されました。
新しい動作
ASP.NET Core 8.0 以降では、同じく SecurityToken から派生した Microsoft.IdentityModel.JsonWebTokens クラスが、既定で SecurityToken
プロパティを実装します。 Microsoft.IdentityModel.JsonWebTokens トークンは、より最適化された TokenHandler ハンドラーによって生成されます。
さらに、JsonWebTokenHandler.DefaultInboundClaimTypeMap フィールドにより、受信要求の既定の要求の種類マッピングが提供されます。
破壊的変更の種類
この変更は、動作変更です。
変更理由
この変更は、JsonWebToken (およびそれに関連する JsonWebTokenHandler) では、次の利点があるために行われました。
- 30% のパフォーマンス向上。
- "前回正常起動時" のメタデータ (
OpenIdConnectMetadata
など) の使用による信頼性の向上。 - 非同期処理。
推奨される操作
プロパティの型 (SecurityToken) は変更されておらず、実際の型を確認する必要はないはずなので、ほとんどのユーザーにとって、この変更は問題になりません。
ただし、影響を受ける SecurityToken
プロパティの 1 つを JwtSecurityToken
にダウンキャスト (たとえば、要求を取得するため) している場合は、次の 2 つのオプションがあります。
プロパティを
JsonWebToken
にダウンキャストします。service.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => { options.Events.OnTokenValidated = (context) => { // Replace your cast to JwtSecurityToken. JsonWebToken token = context.SecurityToken as JsonWebToken; // Do something ... }; });
対応するオプション (JwtBearerOptions、WsFederationOptions、または OpenIdConnectOptions) の
UseSecurityTokenValidators
ブール型プロパティの 1 つをtrue
に設定します。 プロパティをtrue
に設定すると、認証ハンドラーでは引き続きJwtTokenValidators
が使われ、JwtSecurityToken
トークンの生成が継続されます。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 ... }; });
影響を受ける API
- Microsoft.AspNetCore.Authentication.WsFederation.SecurityTokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.JwtBearer.TokenValidatedContext.SecurityToken
- Microsoft.AspNetCore.Authentication.OpenIdConnect.TokenValidatedContext.SecurityToken
- AuthorizationCodeReceivedContext.SecurityToken
.NET