我有一个使用MSOnline
PowerShell模块与Office 365交互的asp.net核心Web应用程序。当Connect-MsolService
cmdlet执行以与Office 365进行身份验证时,出现以下错误。
无法从程序集'System.IdentityModel.Tokens.Jwt,Version = 5.1.5.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'中加载类型'System.IdentityModel.Tokens.JwtSecurityToken'。
当通过单元测试在另一个项目中运行相同的逻辑时,我没有收到错误,代码按预期执行。测试项目和Web项目都使用System.IdentityModel.Tokens.Jwt
程序集的相同版本(5.1.5),因此我不明白为什么在Web应用程序中执行该逻辑时会收到此错误。
我已经读到一个解决方案是降级到System.IdentityModel.Tokens.Jwt
程序集的v4,但我知道它可以在5.1.5中使用,因为我的测试通过了。此外,这对我来说不是一个选择,因为某些aspnetcore程序集需要v5。有谁知道为什么会在asp.net核心Web应用程序中发生这种情况,还是知道不需要降级程序集的解决方案?
更新:
看来我的绑定重定向导致了问题。如果将以下内容添加到测试项目中的app.config文件中,则会产生错误。这很奇怪,因为5.1.5是引用的System.IdentityModel.Tokens.Jwt
的版本,就像默认使用的是其他版本一样。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.4.0.0" newVersion="5.1.5.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
答案 0 :(得分:0)
我最终通过消除System.IdentityModel.Tokens.Jwt
的绑定重定向解决了这个问题。绑定重定向是自动创建的,因为我使用的是Auto-generate binding redirects
选项。我决定只禁用该选项,并手动管理绑定重定向以消除不需要的重定向。
为简单起见,我只是从输出配置文件中复制了自动生成的绑定重定向,并将其粘贴到我的项目app.config文件中。然后,我删除了System.IdentityModel.Tokens.Jwt
重定向,并禁用了Auto-generate binding redirects
选项,它仅在我的app.config文件中使用了重定向,而不是生成解决问题的重定向。
我仍然不明白为什么重定向会导致该错误,希望有人最终会对此有所帮助,但是幸运的是我找到了解决方法。
需要注意的一件事是,如果您的任何依赖项使用了该程序集的不同版本,那么这显然将不起作用。对我来说幸运的是,至少现在不是这样。
答案 1 :(得分:0)
我设法通过更新程序集绑定使之起作用,以排除System.IdentityModel.Tokens.Jwt
正在使用的Connect-MsolService
的版本。这工作了。我更新的程序集绑定是:
<dependentAssembly>
<assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="5.0.0.0-5.6.0.0" newVersion="5.6.0.0" />
</dependentAssembly>