的命名空间.NET JWT令牌验证:系统与微软

本文关键字:系统 微软 验证 令牌 命名空间 NET JWT | 更新日期: 2023-09-27 17:58:09

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

在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);    

JwtSecurityTokenHandlerSystem.IdentityModel.Tokens.Jwt命名空间中,但TokenValidationParameters类及其依赖项在Microsoft.IdentityModel.Tokens命名空间中,并且可能与System.IdentityModel.Tokens命名空间中的类似类冲突。

这是故意的,还是可能是其他地方版本不匹配的迹象?

的命名空间.NET JWT令牌验证:系统与微软

如果您查看的依赖关系

nuget系统。IdentityModel。代币。Jwt 4.0.2

nuget系统。IdentityModel。代币。Jwt 5.0

你会看到5.0依赖

依赖

NETFramework 4.5.1

微软。IdentityModel。代币(>=5.0)

4.0没有。事实上,以前的版本都没有。

微软正在重新设计他们的框架,使其重量更轻。在一个ASP。NET,您将有许多功能冗余。

为了使WIF更轻,同时保持向后兼容,决定从像System.IdentityModel.Tokens.Jwt这样的库中删除冗余功能,不再依赖System.IdentityModel.Tokens,而是依赖Microsoft.IdentityModel.Tokens。不幸的结果之一是,两个层都暴露了相同的方法。

在这些情况下,当您实例化时,您必须提供整个命名空间,以通知编译器您正在引用哪个类和命名空间。所以,你会避免冲突。

微软。NET 4.5中不赞成使用标识。你可以在这里看到更多:https://social.msdn.microsoft.com/Forums/vstudio/en-US/256c6bcd-6752-4487-b2e8-6c63f4efb9e9/difference-between-microsoftidentitymodel-and-systemidentitymodel?forum=Geneva