Проблемы с TokenClient в IdentityModel - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть новый проект MVC, использующий TokenClient из IdentityModel

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

У меня есть пакет nuget для IdentityModel и всекомпилируется нормально.Однако во время выполнения я получаю следующую ошибку.

Метод не найден: 'Void IdentityModel.Client.TokenClient..ctor (System.String, System.String, System.String, System.Net.Http.HttpMessageHandler, IdentityModel.Client.AuthenticationStyle) '.

.NET-версия проекта MVC - 4.6.1

Что может быть причиной этой проблемы?Я искал в Google и не могу найти ничего, что помогает.Это должно быть что-то простое, чего мне не хватает.

РЕДАКТИРОВАТЬ:

инициализация его путем явного объявления параметров также не работает.

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

Однако инициализация его одним параметром работает нормально.

var tokenClient = new TokenClient(tokenUrl);

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Я столкнулся с той же проблемой при работе с примером MVC Getting Started для IdentityServer3.Если вы проверите зависимости для IdentityModel v3.10.1, вы заметите, что это зависит от System.Net.Http (> = 4.3.3).Мой проект был v 4.2, обновление до текущей версии решило проблему.

0 голосов
/ 08 августа 2019

Если вы используете приложение ASP.Net MVC, проверьте перенаправление привязки « System.Net.Http » в web.config

, оно должно быть похоже на

 <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>
0 голосов
/ 20 ноября 2018

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 Framework4.5.2 (последняя совместимая версия для IdentityModel V1)

3) Не используйте эту перегрузку (поскольку вы уже обнаружили, что работает единственный параметр tokenUrl).Я бы держался подальше от этого подхода, так как вы, вероятно, столкнетесь с дополнительными проблемами совместимости.

По сути, если вы не хотите переходить на .NET Core, оставьте этот проект на 4.5.2.Если вы можете мигрировать, сделайте это вместо этого.В любом случае Identity Server движется в направлении .NET Core в целом, и вы сделаете этот скачок еще больше.

...