我一直选择在 session 中使用 jwt,因为后端的开销较少(请记住,这一切都取决于用例),但我遇到的主要问题是 token 失效举个例子:如果用户被停用,相关的 jwt 仍然有效,直到过期。有没有办法以经济高效的方式解决这个问题?
PS - 但是我在 cookbook section on the featherjs 中看到了“撤销 JWT”一词 框架。但看起来他们仍然使用 Redis 作为查找,这反过来又使其继承了使用 session 的缺点。
最佳答案
JWT 发出后,其有效期与 exp
声明值一样长。您无法撤销 JWT,这不是 JWT 的工作方式。
正如您所指出的,有多种方法可以模仿撤销行为,但为此您需要两件事:
- 您需要一个数据库,其中包含有关哪些 token 被撤销的信息
- 您必须确保每当使用 token 时都会在线检查数据库。
没有其他方法可以做到这一点。
如果您确实需要撤销 JWT,则意味着您需要 session ,并且您不应该为此使用 JWT。您可以看看this article了解原因。如果您决定坚持使用 JWT,请查看此 best practices我写这篇文章是为了知道要注意什么。
关于authentication - JWT 可以是有状态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67783024/