You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Web API升级Microsoft.IdentityModel.Tokens后方法找不到问题

问题

我有一个.NET 6 Web API,使用以下代码验证JWT Bearer令牌:

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

该代码原本运行正常,但升级NuGet包后,从Microsoft.IdentityModel.Tokens 6.29版本开始,所有该版本及以上版本都会出现如下错误:

{"Method not found: 'Boolean Microsoft.IdentityModel.Tokens.TokenUtilities.IsRecoverableConfiguration(Microsoft.IdentityModel.Tokens.TokenValidationParameters, Microsoft.IdentityModel.Tokens.BaseConfiguration, Microsoft.IdentityModel.Tokens.BaseConfiguration ByRef)'."}

奇怪的是,我在NuGet页面链接的GitHub源码仓库中仍能找到该方法。

更新说明:我使用了Jason Watmore网站上的JWT令牌验证示例。

原因与解决办法

原因

这是典型的程序集版本冲突问题:

  • Microsoft.IdentityModel.Tokens 6.29+版本对TokenUtilities.IsRecoverableConfiguration方法的签名或内部调用逻辑做了调整,但你的项目中可能存在其他依赖包(比如Microsoft.AspNetCore.Authentication.JwtBearer)引用了该方法的旧版本,导致运行时无法找到匹配的方法实现。
  • 或者项目中同时加载了多个版本的Microsoft.IdentityModel.Tokens程序集,运行时选择了不兼容的版本。

解决步骤

  • 统一相关NuGet包版本:确保项目中Microsoft.IdentityModel.Tokens和所有依赖它的包(例如Microsoft.AspNetCore.Authentication.JwtBearer)版本完全一致。比如如果使用6.29.0版本的Tokens包,对应的JwtBearer包也要升级到相同版本。
  • 清理项目缓存并重建:删除项目目录下的bin和obj文件夹,执行dotnet nuget locals all --clear命令清除NuGet缓存,随后重新构建项目。
  • 检查并修复依赖树:使用dotnet list package --include-transitive命令查看所有直接和间接依赖的版本,排查是否有其他包引入了旧版本的Microsoft.IdentityModel.Tokens。必要时通过项目文件中的<PackageReference>节点强制指定版本,或使用PrivateAssets="all"隔离冲突依赖。
  • 切换到官方推荐的验证方式:如果是手动调用JwtSecurityTokenHandler.ValidateToken,建议改用ASP.NET Core内置的JWT中间件配置,该方式会自动处理版本兼容问题,示例代码如下:
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = false,
                ValidateAudience = false,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = objSecurityKey,
                ClockSkew = TimeSpan.Zero
            };
        });
    

内容的提问来源于stack exchange,提问作者J Weezy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:15:56