更新到 .NET 6 后使用 JWT Bearer Token 进行身份验证时未授权(无效令牌)

Unauthorized (Invalid Token) when authenticating with JWT Bearer Token after update to .NET 6

将包 Microsoft.AspNetCore.Authentication.JwtBearer 从版本 3.1.14 更新到 6.0.1 后,身份验证请求失败并显示 401 未授权“无效令牌”。

新包版本需要更改什么?

这似乎是一个错误。添加事件处理程序 (JwtBearerEvents),失败可以识别为 MissingMethodException:

Method not found: 'Void Microsoft.IdentityModel.Tokens.InternalValidators.ValidateLifetimeAndIssuerAfterSignatureNotValidatedJwt(Microsoft.IdentityModel.Tokens.SecurityToken, System.Nullable`1<System.DateTime>, System.Nullable`1<System.DateTime>, System.String, Microsoft.IdentityModel.Tokens.TokenValidationParameters, System.Text.StringBuilder)'.

有堆栈跟踪

at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters)
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()",

只需添加 System.IdentityModel.Tokens.Jwt 的当前版本即可解决问题。


更新:另请注意下面@Rubenisme 的评论。

虽然我猜你找到了正确的解决方案,但我认为我的回答可能对某些问题有所帮助。

在花了一整天的时间调查同一个问题并没有找到解决方案后,我决定升级这些库以匹配相同的版本:6.16.0 (2022 年 3 月 23 日)

  • Microsoft.IdentityModel.JsonWebTokens
  • Microsoft.IdentityModel.Logging
  • Microsoft.IdentityModel.Protocols
  • Microsoft.IdentityModel.Protocols.OpenIdConnect
  • Microsoft.IdentityModel.Tokens

问题消失了