IdentityModel中TokenClient的问题

问题描述 投票:1回答:2

我有一个使用IdentityModel的TokenClient的新MVC项目

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

我有用于IdentityModel的nuget包,一切都编译得很好。但是,在运行时我收到以下错误。

找不到方法:'Void 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);

但是使用one参数初始化它可以正常工作。

var tokenClient = new TokenClient(tokenUrl);
c# asp.net-identity
2个回答
2
投票

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发展,现在通过实现这一飞跃,您将获得更多里程。


0
投票

我在使用IdentityServer3的MVC入门示例时遇到了同样的问题。如果检查IdentityModel v3.10.1的依赖关系,您会注意到它依赖于System.Net.Http(> = 4.3.3)。我的项目有v 4.2,更新到当前版本解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.