Espaces de nommage pour la validation de jeton .NET JWT: Système contre Microsoft

J’essaie d’utiliser JWT pour authentifier une application Node auprès d’une API Web ASP.NET.

Dans ASP.NET, j’utilise .NET 4.5.1 et le package System.IdentityModel.Tokens.Jwt 5.0.0

Ce que je ne comprends pas, c’est pourquoi les espaces de noms sont mélangés entre Microsoft et System .

Par exemple:

 var tokenReader = new JwtSecurityTokenHandler(); tokenReader.ValidateToken(token, new TokenValidationParameters() { ValidateAudience = false }, out validatedToken); 

Le JwtSecurityTokenHandler principal JwtSecurityTokenHandler trouve dans l’espace de noms System.IdentityModel.Tokens.Jwt , mais la classe TokenValidationParameters et ses dépendances se trouvent dans l’espace de noms Microsoft.IdentityModel.Tokens et peuvent éventuellement entrer en collision avec des classes similaires dans les noms.

Est-ce intentionnel ou est-ce un signe possible d’une non-concordance de version ailleurs?

Si vous jetez un oeil à la dépendance pour

nuget System.IdentityModel.Tokens.Jwt 4.0.2

contre

nuget System.IdentityModel.Tokens.Jwt 5.0

vous verrez que 5.0 a une dépendance sur

Les dépendances

.NETFramework 4.5.1

Microsoft.IdentityModel.Tokens (> = 5.0.0)

que 4.0 n’a pas eu. En fait, aucune version précédente ne l’a fait.

Microsoft ré-architecte leurs frameworks pour qu’ils soient plus légers. Dans un framework de la taille de ASP.NET, vous aurez de nombreuses redondances fonctionnelles.

Pour rendre WIF plus léger, tout en restant compatible avec les versions antérieures, il a été décidé de supprimer les fonctionnalités redondantes de bibliothèques telles que System.IdentityModel.Tokens.Jwt ne dépendent plus de System.IdentityModel.Tokens , mais plutôt de Microsoft.IdentityModel.Tokens . L’un des résultats regrettables est que les deux couches exposent les mêmes méthodes.

Dans ces cas, lorsque vous par exemple, vous devez fournir l’espace de noms complet pour indiquer au compilateur la classe et l’espace de noms que vous référencez. Donc, vous éviterez les conflits.

Microsoft.Identity est obsolète dans NET 4.5. Et vous pouvez en voir plus ici: https://social.msdn.microsoft.com/Forums/vstudio/en-US/256c6bcd-6752-4487-b2e8-6c63f4efb9e9/difference-between-microsoftidentitymodel-and-systemidentprog