java - JWT 中的 "Secret"应该是什么?

标签 java rest jwt secret-key

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

我对 JWT - Secret 有几个问题

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

最佳答案

  1. Does this Secret has to be unique?

它对于您的应用程序应该是唯一的——毕竟它必须是一个secret——但它不会对每个 token 都是唯一的。相反,在任何给定时间,您都应该拥有相对较少数量的 key (例如,通常只有一个 key ,但在从一个 key 轮换到另一个 key 时,您会在短时间内拥有两个 key )。

  1. Shall I use the hashed version of user's password for secret?

不,有两个原因:

  1. 假设您的用户有一个相对不安全的密码,例如 GoPackers123。然后,在您的 secret 中使用密码意味着有人可以轻松地测试给定的潜在密码,看看它是否会产生正确的签名;而且,更重要的是,他们可以轻松测试大量潜在密码,看看其中是否有任何一个给出了正确的签名。这是一次离线攻击,因此您甚至都不会知道它发生了。
  2. 这将要求您将所有用户的密码哈希分发到每个需要保存密码的系统。如果您的用户数量很少,这可能会对您的 secret 分发机制造成相当严重的负担。

关于java - JWT 中的 "Secret"应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42826251/

相关文章:

java - Axis 2 - 是否可以通过 Web 界面测试操作?

java - 无法将附件添加到新 RT 票证中

asp.net - 以Webform显示从REST Web服务检索到的base64图像

go - 如何检查 JWT token 剩余有效期 golang

go - 如何在未经验证的情况下从JWT token 获取声明

GO - 如何将公钥从字符串转换为 PEM 格式

java - 正则表达式继续匹配相似的模式

java - glassfish 如何对所有应用程序使用一个 jar 文件 - CDI

java - 使用 ExecutorService 在具有通过循环传递的不同参数的类中同时执行方法时出现问题

RESTFUL --> 检查某个项目是否处于事件状态?