.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

我不明白的是,为什么命名空间在MicrosoftSystem之间混合。

例如:

 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