升级Microsoft.IdentityModel.Tokens
并System.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" />
更新后,我的包参考现在是:
<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" />
有什么问题吗?
总而言之:添加
<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.JwtBearer
v7.0.11 软件包仍然错误地指出v6.15.1Microsoft.IdentityModel.Protocols.OpenIdConnect
有效。在这种情况下这是错误的,因为 v6.15.1 与 Identity Model 7 及其隐式依赖项不兼容。
解决方案是明确依赖项并在项目中
Microsoft.IdentityModel.Protocols.OpenIdConnect
指定v7.0.0 ,以覆盖隐式 v6 包 - 修复依赖项版本不匹配的问题。这应该是一个临时修复,直到微软希望在即将发布的软件包更新中修复这个问题。
这是解决此问题的最小软件包集: