我打算将 JWT 应用到我使用 Java-Jersey 开发的 REST API 中。我正在将此库用于 JWT - https://github.com/auth0/java-jwt
我对 JWT - Secret 有几个问题
- 这个
Secret
必须是唯一的吗? - 我应该使用用户密码的散列版本来保密吗? (那么无论如何它都不是唯一的)这是因为当用户更改密码时,他的 token 将自动失效。
最佳答案
- Does this
Secret
has to be unique?
它对于您的应用程序应该是唯一的——毕竟它必须是一个secret——但它不会对每个 token 都是唯一的。相反,在任何给定时间,您都应该拥有相对较少数量的 key (例如,通常只有一个 key ,但在从一个 key 轮换到另一个 key 时,您会在短时间内拥有两个 key )。
- Shall I use the hashed version of user's password for secret?
不,有两个原因:
- 假设您的用户有一个相对不安全的密码,例如
GoPackers123
。然后,在您的 secret 中使用密码意味着有人可以轻松地测试给定的潜在密码,看看它是否会产生正确的签名;而且,更重要的是,他们可以轻松测试大量潜在密码,看看其中是否有任何一个给出了正确的签名。这是一次离线攻击,因此您甚至都不会知道它发生了。 - 这将要求您将所有用户的密码哈希分发到每个需要保存密码的系统。如果您的用户数量很少,这可能会对您的 secret 分发机制造成相当严重的负担。
关于java - JWT 中的 "Secret"应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42826251/