安全性權杖事件會傳回 JsonWebToken
JwtBearerEvents、WsFederationEvents 和 OpenIdConnectEvents 事件分別是由 JwtBearer、WsFederation 和 OpenIdConnect 驗證處理常式引發的驗證事件。 例如,OnTokenValidated 事件會在驗證安全性權杖時引發。 這些事件會以公開抽象類型 SecurityToken 的 TokenValidatedContext.SecurityToken 屬性的內容 (例如 TokenValidatedContext) 引發。 TokenValidatedContext.SecurityToken 的預設實際實作已從 JwtSecurityToken 變更為 JsonWebToken。
導入的版本
ASP.NET Core 8.0 Preview 7
先前的行為
先前,受影響的 SecurityToken
屬性是由 JwtSecurityToken 實作,其衍生自 SecurityToken。 JwtSecurityToken 是前一代的 JSON Web Token (JWT) 實作。 JwtSecurityToken 權杖是由 SecurityTokenValidators 產生。
此外,JwtSecurityTokenHandler.DefaultInboundClaimTypeMap 欄位也提供輸入宣告的預設宣告類型對應。
新的行為
從 ASP.NET Core 8.0 開始,Microsoft.IdentityModel.JsonWebTokens 類別 (也衍生自 SecurityToken) 預設會實作 SecurityToken
屬性。 Microsoft.IdentityModel.JsonWebTokens 權杖是由更最佳化的 TokenHandler 處理常式所產生。
此外,JsonWebTokenHandler.DefaultInboundClaimTypeMap 欄位也提供輸入宣告的預設宣告類型對應。
中斷性變更的類型
此變更為行為變更。
變更原因
進行這項變更是因為 JsonWebToken (及其相關聯的 JsonWebTokenHandler) 帶來下列好處:
- 30% 的效能改善。
- 使用「最後已知的良好」中繼資料 (例如
OpenIdConnectMetadata
) 提高了可靠性。 - 異步處理。
建議的動作
對大部分的使用者來說,這項變更應該不是個問題,因為屬性的類型 (SecurityToken) 並沒有改變,而且您也不應該查看真實類型。
不過,如果您要將其中一個受影響的 SecurityToken
屬性向下轉換為 JwtSecurityToken
(例如,為了取得宣告),您有兩個選項:
將該屬性向下轉換為
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
布林值屬性設定為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