的命名空间.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
我不明白的是,为什么名称空间混合在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系统。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