我正在尝试使用JWT来验证ASP.NET Web API的Node应用程序。
在ASP.NET中,我使用的是.NET 4.5.1和nuget package System.IdentityModel.Tokens.Jwt
5.0.0
我不明白的是,为什么命名空间在Microsoft
和System
之间混合。
例如:
var tokenReader = new JwtSecurityTokenHandler();
tokenReader.ValidateToken(token,
new TokenValidationParameters()
{
ValidateAudience = false
},
out validatedToken);
主JwtSecurityTokenHandler
位于System.IdentityModel.Tokens.Jwt
命名空间中,但TokenValidationParameters
类及其依赖项位于Microsoft.IdentityModel.Tokens
命名空间中,并且可能与System.IdentityModel.Tokens
中的类似类冲突{1}}命名空间。
这是设计还是这可能是其他地方版本不匹配的标志?
答案 0 :(得分:8)
如果你看一下
的依赖关系nuget System.IdentityModel.Tokens.Jwt 4.0.2
vs
nuget System.IdentityModel.Tokens.Jwt 5.0
您将看到5.0依赖
那是4.0没有的。事实上,没有以前的版本。依赖关系
.NETFramework 4.5.1
Microsoft.IdentityModel.Tokens(> = 5.0.0)
微软正在重新构建他们的框架,使其更轻量级。在ASP.NET的大小框架中,您将拥有许多功能冗余。
为了使WIF更轻,同时保持向后兼容,我们决定从System.IdentityModel.Tokens.Jwt
等库中删除冗余功能,而不再依赖于System.IdentityModel.Tokens
,而是依赖于Microsoft.IdentityModel.Tokens
。其中一个不幸的结果是两层都暴露了相同的方法。
答案 1 :(得分:0)
在这些情况下,当您实例时,您必须提供整个命名空间,以通知编译器您引用的类和命名空间。所以,你会避免冲突。
在.NET 4.5中不推荐使用Microsoft.Identity。你可以在这里看到更多:https://social.msdn.microsoft.com/Forums/vstudio/en-US/256c6bcd-6752-4487-b2e8-6c63f4efb9e9/difference-between-microsoftidentitymodel-and-systemidentitymodel?forum=Geneva