找不到方法:'Boolean Microsoft.IdentityModel.Tokens.TokenUtilities.IsRecoverableConfiguration

J W*_*ezy 3 c# web asp.net-core

我有一个 .NET 6 Web API,它尝试使用以下代码验证 JWT 承载令牌:

objReturn = new JwtSecurityTokenHandler().ValidateToken(strJwtToken,
    new TokenValidationParameters
    {
        ValidateIssuer = false,
        ValidateAudience = false,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = objSecurityKey,
        ClockSkew = TimeSpan.Zero
    }, out objSecurityToken);
Run Code Online (Sandbox Code Playgroud)

这很好用;Microsoft.IdentityModel.Tokens但是,我今天升级了 NuGet 包,现在从版本 6.29 开始,我收到了该包的所有版本的以下错误:

{“找不到方法:'Boolean Microsoft.IdentityModel.Tokens.TokenUtilities.IsRecoverableConfiguration(Microsoft.IdentityModel.Tokens.TokenValidationParameters,Microsoft.IdentityModel.Tokens.BaseConfiguration,Microsoft.IdentityModel.Tokens.BaseConfiguration ByRef)'。”}

奇怪的是,当我访问它的 NuGet.org 页面时,该方法似乎仍然存在,该页面将我链接到它在 GitHub 上的源代码库。这个缺失的方法似乎就在那里 - 可以在此处找到,从第 203 行开始。

有什么想法以及如何解决吗?

更新:

我使用了有关如何从该站点验证 JWT 令牌的示例: https: //jasonwatmore.com/post/2022/01/19/net-6-create-and-validate-jwt-tokens-use-custom-jwt -中间件

L.V*_*let 5

解释

我遇到了同样的问题,因为我的一个依赖项引用Microsoft.IdentityModel.JsonWebTokens了最新版本(例如 6.32.1),另一个引用Microsoft.AspNetCore.Authentication.JwtBearerMicrosoft.AspNetCore.Authentication.OpenIdConnect(7.0.x),而后者又引用Microsoft.IdentityModel.Protocols.OpenIdConnect了“最低版本”(例如 >=6.15.1)这取决于System.IdentityModel.Tokens.Jwt取决于Microsoft.IdentityModel.JsonWebTokens

Microsoft.AspNetCore.Authentication.OpenIdConnect (7.0.x)
|_ Microsoft.IdentityModel.Protocols.OpenIdConnect (6.15.1) 
   |_ System.IdentityModel.Tokens.Jwt (6.15.1)
      |_ Microsoft.IdentityModel.JsonWebTokens (6.32.1) [explicitly added]
Run Code Online (Sandbox Code Playgroud)

NuGet 兼容性检查表明没有错误,但Microsoft.IdentityModel.Protocols.OpenIdConnect版本 6.15.1 与其方法签名已更改的更新版本不兼容Microsoft.IdentityModel.JsonWebTokens

解决方案

您可以删除对 的显式引用Microsoft.IdentityModel.JsonWebTokens

否则,您必须在与您的依赖项兼容的最新版本中显式添加 NuGetSystem.IdentityModel.Tokens.Jwt包。Microsoft.IdentityModel.Protocols.OpenIdConnectMicrosoft.AspNetCore.Authentication.XXX