JWT 中的“秘密”应该是什么?

新手上路,请多包涵

我将把 JWT 应用到我使用 Java-Jersey 开发的 REST API 中。我正在将这个库用于 JWT - https://github.com/auth0/java-jwt

我对 JWT - Secret 有几个问题

  1. 这个 Secret 必须是唯一的吗?
  2. 我应该使用用户密码的散列版本来保密吗? (那么无论如何它都不是唯一的)这是因为当用户更改密码时,他的令牌将自动失效。

原文由 PeakGen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 695
1 个回答
  1. 这个 Secret 必须是唯一的吗?

它对于您的应用程序应该是唯一的——毕竟它需要是一个 _秘密_——但它不会对每个令牌都是唯一的。相反,您在任何给定时间都应该拥有相对较少数量的秘密密钥(例如,通常只有一个密钥,但在您从一个密钥轮换到下一个密钥时,有短暂的时间段您有两个密钥)。

  1. 我应该使用用户密码的散列版本来保密吗?

不会,原因有二:

  1. 假设您的用户有一个相对不安全的密码,例如 GoPackers123 。在你的秘密中使用密码意味着有人可以轻松地测试给定的潜在密码,看看它是否会产生正确的签名;而且,更重要的是,他们可以轻松地测试大量潜在密码,看看其中是否有任何一个给出了正确的签名。这是一次离线攻击,所以你永远不会知道它发生了。
  2. 这将要求您将所有用户的密码散列分发到每个需要保密的系统。如果您的用户数量多于微不足道,这可能会成为您的秘密分发机制的一个相当严重的负担。

原文由 ruakh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题