为什么我们有两个 JWT 令牌类 JwtSecurityTokenHandler 和 JsonWebTokenHandler?

hem*_*ant 10 .net jwt .net-core asp.net-core

它总是令人困惑,并且没有提到哪个更好,我个人更喜欢 JsonWebTokenHandler,因为它是 ValidateToken 的更合适的返回类型

命名空间的区别是 Microsoft.IdentityModel.JsonWebTokens 与 System.IdentityModel.Tokens.Jwt,这也很相似?

有可用的指南吗?

小智 12

JsonWebTokenHandler 是新的改进版本。

请参阅:https ://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/945

布伦施马尔茨写道:

JwtSecurityTokenHandler 是根据现有的 System.IdentityModel.SecurityTokenHandler 建模的。我们必须做出一些妥协,例如在使用 SecurityTokenDescriptor 时使用 System.Security.ClaimsIdentity 作为构建 JWS 或 JWE 的类型。ValidateToken 有一个 SecurityToken 类型的输出参数,该参数不适用于异步。返回 ClaimsPrincipal,有时使用声明类型映射来构建声明。该模型是新模型,重量更轻,并且可与本机 Json.Net 对象一起使用。我们计划在顶部分层,以便您可以返回现有类型,但我们将允许用户使用注入和委托来控制返回的内容。

在某些情况下,我们看到性能提升高达 100%。

  • 此外,在该项目的[wiki页面](https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/wiki)上,明确指出“Microsoft.IdentityModel.Tokens.JsonWebTokens” “是‘System.IdentityModel.Tokens.Jwt’的更新、更快版本,具有附加功能。” (3认同)