.NET JWT令牌验证的命名空间:System vs. Microsoft

时间:2016-07-22 12:51:11

标签: c# asp.net jwt

我正在尝试使用JWT来验证ASP.NET Web API的Node应用程序。

在ASP.NET中,我使用的是.NET 4.5.1和nuget package 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中的类似类冲突{1}}命名空间。

这是设计还是这可能是其他地方版本不匹配的标志?

2 个答案:

答案 0 :(得分:8)

如果你看一下

的依赖关系

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的大小框架中,您将拥有许多功能冗余。

为了使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