IdentityModel中的TokenClient问题



我有一个新的MVC项目,使用IdentityModelTokenClient

var tokenClient = new TokenClient(tokenUrl, clientId, CLIENT_SECRET, null, AuthenticationStyle.BasicAuthentication);

我有IdentityModel的nuget包,一切都编译得很好。然而,在运行时,我会得到以下错误。

未找到方法:'无效IdentityModel.Client.TokenClient.ctor(System.String,System.String,System.String,System.Net.Http.HttpMessageHandler,IdentityModel.Client.AuthenticationStyle('.

MVC项目的.NET版本是4.6.1

是什么原因导致了这个问题?我一直在谷歌上搜索,找不到任何有帮助的东西。我一定错过了一些简单的东西。

编辑:

通过显式声明参数来初始化它也不起作用。

var tokenClient = new TokenClient(tokenUrl, clientId: clientId, clientSecret: CLIENT_SECRET);// CLIENT_SECRET, null, AuthenticationStyle.BasicAuthentication);

不过,用一个参数初始化它可以很好地工作。

var tokenClient = new TokenClient(tokenUrl);

IdentityModel是由Identity Server的创建者构建的第三方库。v3.10.1中确实有方法重载。我已经重新创建了您的错误,您出现错误的原因是IdentityModel v3.10.1与.NET Framework 4.6.1不兼容。创建者更改了该重载的签名,并将HttpMessageHandler设置为可选参数,这样您的代码就会编译,但在运行时会抛出此Method Not Found错误。您所引用的IdentityModel项目已经由Identity Server的人员存档,因此如果可以的话,我建议您进行迁移。

在我看来,你有几个选择:

1( 迁移到.NET Core并利用IdentityModel v2。

2( 将您的项目降级到.NET Framework 4.5.2(IdentityModel V1的最后一个兼容版本(

3( 不要使用此重载(因为您已经发现单个tokenUrl参数有效(。我会远离这种方法,因为您可能会遇到其他兼容性问题。

基本上,如果您不想迁移到.NET Core,请将此项目保留在4.5.2上。如果可以迁移,请改为迁移。无论如何,Identity Server作为一个整体正在向.NET Core迈进,现在您将通过实现这一飞跃获得更多里程。

我在处理IdentityServer3的MVC Getting Started示例时遇到了同样的问题。如果你检查IdentityModel v3.10.1的依赖项,你会注意到它依赖于System.Net.Http(>=4.3.3(。我的项目有v4.2,更新到当前版本解决了这个问题。

如果您正在使用ASP.Net MVC应用程序,请检查web.config 中">System.Http"的绑定重定向

它应该像

<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

相关内容

  • 没有找到相关文章

最新更新