.NET JWT令牌validation的命名空间:System vs. Microsoft
我正在尝试使用JWT来validationASP.NET Web API的Node应用程序。
在ASP.NET中,我使用的是.NET 4.5.1和nuget包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
命名空间中的类似类冲突。
这是设计还是这可能是其他地方版本不匹配的标志?
如果你看一下依赖关系
nuget System.IdentityModel.Tokens.Jwt 4.0.2
VS
nuget System.IdentityModel.Tokens.Jwt 5.0
你会看到5.0依赖于
依赖
.NETFramework 4.5.1
Microsoft.IdentityModel.Tokens(> = 5.0.0)
4.0没有。 事实上,没有以前的版本。
微软正在重新构建他们的框架,使其更轻量级。 在ASP.NET的大小框架中,您将拥有许多function冗余。
为了使WIF更轻,同时保持向后兼容,决定从System.IdentityModel.Tokens.Jwt
库中删除冗余function,不再依赖于System.IdentityModel.Tokens
,而是依赖于Microsoft.IdentityModel.Tokens
。 不幸的结果之一是两层都暴露了相同的方法。
在这些情况下,当您实例时,您必须提供整个命名空间,以通知编译器您正在引用哪个类和命名空间。 所以,你会避免冲突。
在.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