为啥我们有两个用于 JWT 令牌 JwtSecurityTokenHandler 和 JsonWebTokenHandler 的类?
Posted
技术标签:
【中文标题】为啥我们有两个用于 JWT 令牌 JwtSecurityTokenHandler 和 JsonWebTokenHandler 的类?【英文标题】:Why we have two classes for JWT tokens JwtSecurityTokenHandler vs JsonWebTokenHandler?为什么我们有两个用于 JWT 令牌 JwtSecurityTokenHandler 和 JsonWebTokenHandler 的类? 【发布时间】:2020-06-12 18:16:00 【问题描述】:它总是令人困惑,没有提到哪个更好用,我个人更喜欢 JsonWebTokenHandler 因为它更适合 ValidateToken 的返回类型
命名空间的区别是Microsoft.IdentityModel.JsonWebTokens vs System.IdentityModel.Tokens.Jwt,也挺相似的?
有任何可用的指南吗?
【问题讨论】:
【参考方案1】:JsonWebTokenHandler 是新的和改进的版本。
见:https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/945
brentschmaltz 写道:
JwtSecurityTokenHandler 是根据现有的 System.IdentityModel.SecurityTokenHandler 建模的。我们必须做出一些妥协,例如在使用 SecurityTokenDescriptor 时使用 System.Security.ClaimsIdentity 作为构建 JWS 或 JWE 的类型。 ValidateToken 有一个 SecurityToken 类型的 out 参数,它不适用于异步。 返回了 ClaimsPrincipal,有时使用声明类型映射来构建声明。 这个模型是新模型,重量更轻,并且适用于原生 Json.Net 对象。 我们计划在顶层进行分层,以便您可以恢复到现有类型,但我们将允许用户控制使用注入和委托返回的内容。
在某些情况下,我们看到性能提升高达 100%。
【讨论】:
另外,在wiki page for the project 上,明确指出Microsoft.IdentityModel.Tokens.JsonWebTokens
“是System.IdentityModel.Tokens.Jwt
的更新、更快的版本,具有附加功能。”以上是关于为啥我们有两个用于 JWT 令牌 JwtSecurityTokenHandler 和 JsonWebTokenHandler 的类?的主要内容,如果未能解决你的问题,请参考以下文章