如何立即撤销特定用户的jwt访问令牌?

时间:2019-05-11 12:12:47

标签: node.js express jwt passport.js

我的访问令牌的有效期很短(5分钟),并且刷新了令牌。

如何立即撤销特定用户的访问令牌?

例如,如果我想禁止某些用户?我单击了“禁止”按钮,现在我想立即撤消他的访问令牌。我不想等待令牌到期。

我需要以某种方式创建令牌黑名单,但是如果我不知道特定用户的访问令牌,该如何将其添加到黑名单?

我应将所有jwt令牌存储在数据库中还是redis?代码示例将非常有帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

我认为没有图书馆可以帮助您立即使无效一个已签名的令牌。但是可以,您可以在PostgreSQL或MongoDB等数据库中将它们白名单。但是由于性能问题,最好将它们存储在 Redis 中。当refresh_token签名后,将其设置为Redis。在refresh_token端点中,您在其中验证并使用refresh_token发出新的访问令牌,请检查数据库中是否存在refresh_token。如果不是,则无效。

但是您如何撤消它们,或将它们从数据库中删除,以使它们无效?您创建一个注销终结点,从数据库中删除该refresh_token。

FYI::我发现在存储数据库之前先对 JWT 进行哈希处理是个好习惯,然后您就可以将其与所有内容进行比较。这样更安全,因为任何有权访问您数据库的人(在这种情况下为Redis)都可​​以使用已经有效的refresh_token。