我的访问令牌的有效期很短(5分钟),并且刷新了令牌。
如何立即撤销特定用户的访问令牌?
例如,如果我想禁止某些用户?我单击了“禁止”按钮,现在我想立即撤消他的访问令牌。我不想等待令牌到期。
我需要以某种方式创建令牌黑名单,但是如果我不知道特定用户的访问令牌,该如何将其添加到黑名单?
我应将所有jwt令牌存储在数据库中还是redis?代码示例将非常有帮助。
谢谢
答案 0 :(得分:0)
我认为没有图书馆可以帮助您立即使无效一个已签名的令牌。但是可以,您可以在PostgreSQL或MongoDB等数据库中将它们白名单。但是由于性能问题,最好将它们存储在 Redis 中。当refresh_token
签名后,将其设置为Redis。在refresh_token端点中,您在其中验证并使用refresh_token发出新的访问令牌,请检查数据库中是否存在refresh_token。如果不是,则无效。
但是您如何撤消它们,或将它们从数据库中删除,以使它们无效?您创建一个注销终结点,从数据库中删除该refresh_token。
FYI::我发现在存储数据库之前先对 JWT 进行哈希处理是个好习惯,然后您就可以将其与所有内容进行比较。这样更安全,因为任何有权访问您数据库的人(在这种情况下为Redis)都可以使用已经有效的refresh_token。