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

VS2017 MVC5应用发布目录设引用项目独立文件夹及JWT版本冲突问询

问题2:解决System.IdentityModel.Tokens.Jwt版本冲突及ADFS身份验证配置

这个版本冲突是OWIN 3.x和新版JWT组件的典型兼容问题,核心是OWIN依赖的旧版JWT组件和你的公共项目高版本组件不兼容。下面是一步步的解决办法:

1. 配置程序集绑定重定向(强制统一版本)

这是解决.NET程序集版本冲突的标准方案,在主项目的Web.config中添加以下配置,把所有对旧版本System.IdentityModel.Tokens.Jwt的请求重定向到你公共项目使用的版本(比如5.1.4):

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" 
                          publicKeyToken="31bf3856ad364e35" 
                          culture="neutral" />
        <!-- 替换newVersion为你的公共项目使用的版本号 -->
        <bindingRedirect oldVersion="0.0.0.0-5.1.4.0" newVersion="5.1.4.0" />
      </dependentAssembly>
      <!-- 若还有Microsoft.IdentityModel.Protocols等相关组件冲突,同样添加重定向 -->
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.IdentityModel.Protocols" 
                          publicKeyToken="31bf3856ad364e35" 
                          culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.1.4.0" newVersion="5.1.4.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这一步会让整个应用强制使用高版本的JWT组件,忽略OWIN依赖的旧版本。

2. 适配ADFS身份验证的配置代码

因为用了高版本的JWT组件,你需要调整ADFS的OWIN配置,确保兼容:

  • 首先确保主项目安装的Microsoft.Owin.Security.WsFederation版本和OWIN 3.1.0.0兼容(建议安装3.1.0版本的该包)
  • 然后在Startup.Auth.cs中调整配置,复用公共项目的JWT处理逻辑:
using System.IdentityModel.Tokens.Jwt;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.WsFederation;

public void ConfigureAuth(IAppBuilder app)
{
    // 禁用默认声明映射,避免和新版JWT组件冲突
    JwtSecurityTokenHandler.DefaultMapInboundClaims = false;

    app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions
    {
        MetadataAddress = "https://your-adfs-server/FederationMetadata/2007-06/FederationMetadata.xml",
        Wtrealm = "your-app-realm-uri", // 替换为你的应用在ADFS中的Realm
        TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "https://your-adfs-server/adfs/services/trust", // ADFS的Issuer URI
            // 这里可以复用公共项目中定义的TokenValidationParameters配置
        }
    });
}

3. 检查并清理NuGet依赖

  • 打开主项目的NuGet包管理器,确保Microsoft.Owin系列包版本统一为3.1.0.0,避免混合版本
  • 公共项目只保留System.IdentityModel.Tokens.Jwt(≥5.1.4),不要引入OWIN相关包,避免依赖混乱
  • 如果安装包时出现警告,优先选择"接受更新"但保留OWIN核心版本,或手动调整包版本

4. 测试验证

  • 先在本地运行项目,检查是否有FileNotFoundException或AssemblyLoadException(可查看Visual Studio输出窗口)
  • 测试ADFS登录流程,确保身份验证正常跳转,用户信息能正确获取
  • 测试公共项目的JWT功能(比如生成、验证JWT),确保和ADFS身份验证共存时无冲突

内容的提问来源于stack exchange,提问作者3not3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:21:21