【问题标题】:How can I immediately revoke jwt access token for specific user?如何立即撤销特定用户的 jwt 访问令牌?
【发布时间】:2019-09-29 02:38:03
【问题描述】:
我有短期到期(5 分钟)的访问令牌和刷新令牌。
如何立即撤销特定用户的访问令牌?
例如,如果我想禁止某个用户?我点击了禁止按钮,现在我想立即撤销他的访问令牌。我不想等待令牌过期。
我需要以某种方式创建令牌黑名单,但如果我不知道特定用户的访问令牌,如何将其添加到黑名单?
我应该将所有 jwt 令牌存储在数据库还是 redis 中?代码示例会很有帮助。
谢谢
【问题讨论】:
标签:
node.js
express
jwt
passport.js
【解决方案1】:
我不认为有一个库可以帮助您立即使签名令牌失效。但是是的,您可以在数据库(例如 PostgreSQL 或 MongoDB)中将它们列入白名单。但由于性能问题,最好将它们存储在 Redis 中。当 refresh_token 被签名后,将其设置为 Redis。在您验证并使用 refresh_token 发出新访问令牌的 refresh_token 端点中,检查数据库中是否存在该 refresh_token。如果不是则无效。
但是你如何撤销它们,或者从数据库中删除它们,使它们无效?您创建一个 logout 端点,并从数据库中删除该 refresh_token。
仅供参考:我发现在存储到数据库之前对 JWT 进行哈希处理是一种很好的做法,然后如您所知进行比较,以及所有这些东西.这种方式更安全,因为任何有权访问您的数据库的人(在这种情况下为 Redis)都可以使用已经有效的 refresh_token。