J'ai un nouveau projet MVC utilisant TokenClient de IdentityModel

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

J'ai le package nuget pour IdentityModel et tout se compile bien. Cependant, au moment de l'exécution, j'obtiens l'erreur suivante.

Méthode introuvable: «Void IdentityModel.Client.TokenClient..ctor (System.String, System.String, System.String, System.Net.Http.HttpMessageHandler, IdentityModel.Client.AuthenticationStyle)».

La version .NET du projet MVC est 4.6.1

Qu'est-ce qui peut causer ce problème? J'ai cherché sur Google et je ne trouve rien qui puisse m'aider. Ce doit être quelque chose de simple qui me manque.

MODIFIER:

L'initialiser en déclarant les paramètres explicitement ne fonctionne pas non plus.

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

Cependant, l'initialiser avec le seul paramètre fonctionne bien.

var tokenClient = new TokenClient(tokenUrl);
2
markblue777 20 nov. 2018 à 18:27

3 réponses

Meilleure réponse

IdentityModel est une bibliothèque tierce construite par les créateurs d'Identity Server. La v3.10.1 contient certainement cette surcharge de méthode. J'ai recréé votre erreur et la raison pour laquelle vous obtenez l'erreur est que IdentityModel v3.10.1 n'est pas compatible avec .NET Framework 4.6.1. Les créateurs ont modifié la signature de cette surcharge et ont fait du HttpMessageHandler un paramètre facultatif afin que votre code se compile, mais lèvera cette erreur Method Not Found au moment de l'exécution. Le projet IdentityModel que vous référencez a été archivé par les gars d'Identity Server, je vous recommande donc de migrer si vous le pouvez.

Vous avez quelques options telles que je les vois:

1) Migrez vers .NET Core et tirez parti d'IdentityModel v2.

2) Rétrograder votre projet vers .NET Framework 4.5.2 (la dernière version compatible pour IdentityModel V1)

3) N'utilisez pas cette surcharge (car vous avez déjà trouvé que le seul paramètre tokenUrl fonctionne). Je resterais à l'écart de cette approche car vous risquez de rencontrer des problèmes de compatibilité supplémentaires.

Fondamentalement, si vous ne souhaitez pas migrer vers .NET Core, conservez ce projet sur 4.5.2. Si vous pouvez migrer, faites-le à la place. Identity Server évolue de toute façon vers .NET Core dans son ensemble et vous obtiendrez plus de kilométrage en faisant ce saut maintenant.

2
user1011627 20 nov. 2018 à 17:10

J'ai rencontré le même problème en travaillant sur l'exemple de démarrage MVC pour IdentityServer3. Si vous vérifiez les dépendances pour IdentityModel v3.10.1, vous remarquerez que cela dépend de System.Net.Http (> = 4.3.3). Mon projet avait la version 4.2, la mise à jour vers la version actuelle a résolu le problème.

0
rjax 23 nov. 2018 à 13:33

Si vous utilisez l'application ASP.Net MVC, vérifiez la redirection de liaison de " System.Net.Http " dans web.config

Ça devrait être comme

 <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
Airn5475 8 août 2019 à 13:37