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

我正在尝试使用JWT将Node应用程序认证到ASP.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 System.IdentityModel.Tokens.Jwt 4.0.2

VS

nuget System.IdentityModel.Tokens.Jwt 5.0

你会看到5.0有一个依赖

Dependencies

.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.不幸的结果之一是两层暴露了相同的方法.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...