为什么从 v6 升级到 IdentityModel v7 后出现 IDX20803 错误?

Moh*_*ras 15 c# jwt identitymodel

升级Microsoft.IdentityModel.TokensSystem.IdentityModel.Tokens.Jwt到后7.0.0,我收到此错误:

IDX20803:无法从“https://example.com/realms/Development/.well-known/openid-configuration”获取配置。

无法从程序集“Microsoft.IdentityModel.Tokens,Version=7.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”加载类型“Microsoft.IdentityModel.Json.JsonConvert”。无法从程序集“Microsoft.IdentityModel.Tokens,Version=7.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”加载类型“Microsoft.IdentityModel.Json.JsonConvert”。=> Microsoft.IdentityModel.Json.JsonConvert

更新之前,我的包参考是:

<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.10" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.32.3" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.32.3" />
<PackageReference Include="System.Text.Json" Version="7.0.3" />
Run Code Online (Sandbox Code Playgroud)

更新后,我的包参考现在是:

<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.11" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="7.0.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.0.0" />
<PackageReference Include="System.Text.Json" Version="7.0.3" />
Run Code Online (Sandbox Code Playgroud)

有什么问题吗?

Erm*_*ary 33

总而言之:添加<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="7.0.0" />


根据发行说明,在 v6 和 v7 之间System.IdentityModel.Tokens.Jwt,JSON 序列化器/反序列化器已从 Newtonsoft Json.NET 更改为System.Text.Json.

它有 2 个隐式依赖项:

  • Microsoft.IdentityModel.Tokens(在这种情况下你已经明确表示)
  • Microsoft.IdentityModel.JsonWebTokens

根据定义,IdentityModel v7.0.0 还将这些隐式依赖项升级到相应的 v7.0.0 - 正如预期的那样,到目前为止效果良好。

问题不在于升级后的软件包,而是突出显示了Microsoft.AspNetCore.Authentication.JwtBearer将一起使用的软件包的问题。

该包对Microsoft.IdentityModel.Protocols.OpenIdConnect.

但是,最新的Microsoft.AspNetCore.Authentication.JwtBearerv7.0.11 软件包仍然错误地指出v6.15.1Microsoft.IdentityModel.Protocols.OpenIdConnect有效。

在这种情况下这是错误的,因为 v6.15.1 与 Identity Model 7 及其隐式依赖项不兼容。


解决方案是明确依赖项并在项目中Microsoft.IdentityModel.Protocols.OpenIdConnect指定v7.0.0 ,以覆盖隐式 v6 包 - 修复依赖项版本不匹配的问题。

这应该是一个临时修复,直到微软希望在即将发布的软件包更新中修复这个问题。

<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="7.0.0" />
Run Code Online (Sandbox Code Playgroud)

这是解决此问题的最小软件包集:

<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.11" />
    <PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="7.0.0" />
    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="7.0.0" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

  • 7.2 仍未修复 (2认同)