为啥我应该使用 JWT 而不是简单的散列令牌

Posted

技术标签:

【中文标题】为啥我应该使用 JWT 而不是简单的散列令牌【英文标题】:Why should i use JWT not simple hashed token为什么我应该使用 JWT 而不是简单的散列令牌 【发布时间】:2017-06-11 10:20:59 【问题描述】:

由于不应共享敏感信息,JWT 有什么需求?

我可以创建一个令牌列,将其存储在数据库中并调用它,以交叉验证令牌并获取用户详细信息。

自定义生成的令牌可以使用密钥进行哈希处理,因此不会被解码。既然这么简单,为什么要使用复杂的 JWT 类型,它有信息。

【问题讨论】:

【参考方案1】:

由于不应共享敏感信息,JWT 有什么需求?

在大多数情况下,不能将具有私有 ID、到期日期或颁发者的主题视为敏感主题。并且令牌必须在双方之间保密,因为拥有是身份验证的证明。

无论如何,JWT 内容都可以使用 JWE 进行加密。

自定义生成的令牌可以使用密钥进行哈希处理,因此不会被解码。既然这么简单,为什么要使用复杂的 JWT 类型,它有信息。

与不透明的令牌系统相比,JWT 有一些优势:

令牌不需要服务器存储 令牌有过期日期 在各方之间安全地共享信息。

还有缺点……

没有撤销机制。不建议设置黑名单,因为它破坏了 JWT 无状态 增加令牌大小

【讨论】:

以上是关于为啥我应该使用 JWT 而不是简单的散列令牌的主要内容,如果未能解决你的问题,请参考以下文章

为啥要使用环境变量对 JSON Web 令牌 (JWT) 进行签名?

为啥关键字参数必须作为带有符号键的哈希传递,而不是 Ruby 中的字符串键?

JWT 是不是总是需要访问令牌和刷新令牌?

有效地将给定令牌与数据库中的散列,盐渍令牌进行比较

如何在 Spring security 和 JwtBuilder 中处理 JWT 过期(我应该使用 cookie max age)

JWT 身份验证方案中的刷新令牌是不是应该使用与访问令牌不同的秘密进行签名?