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

wrs*_*der 18 c# asp.net jwt

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

在ASP.NET中,我使用的是.NET 4.5.1和nuget包System.IdentityModel.Tokens.Jwt5.0.0

我不明白的是,为什么命名空间在Microsoft和之间混合System.

例如:

var tokenReader = new JwtSecurityTokenHandler();

tokenReader.ValidateToken(token, 
                new TokenValidationParameters()
            {
                ValidateAudience = false
            },
                out validatedToken);    
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*ich 9

如果你看一下依赖关系

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

  • @TarkaDaal,看到了混乱。“Microsoft.IdentityModel.Tokens”是**旧**库。它已作为依赖项重新引入。`System.IdentityModel` 已作为依赖项删除。您应该始终使用“System.IdentityModel.Tokens.Jwt”方法和类(如果可用)。这种向后兼容的轻量级架构的不幸部分是依赖库公开了相同的方法。理想情况下,“Microsoft.IdentityModel.Tokens”应该是私有方法或以不同的名称命名。我希望我能澄清而不是进一步令人困惑...... (4认同)