使用 JWT 令牌机制实现从所有设备功能注销的方法是什么?

Kap*_*phy 9 redis node.js access-token jwt express-jwt

我想在我的下一个项目中实现 JWT。我只想知道是否有任何最佳方法可以实现从 JWT 中的所有设备注销。由于 JWT 是无状态机制,我们是否必须涉及 redis/db?

Kap*_*phy 9

我发现以下是使用 jwt 处理少数事情的最佳方法。

由于 jwt 是无状态机制,我遇到了以下问题。

  • 如何实现注销?当有人尝试注销时,由于它是无状态的,因此会出现使令牌无效的问题。

    解决方案: 使用 redis 作为处理所有令牌的内存数据库,每次用户登录时保存令牌(与令牌具有相同的 ttl),与每个请求以及令牌验证进行交叉检查。当有人想注销时,从redis中连同客户端一起删除令牌。由于我们在redis中交叉检查,当用户注销并尝试使用相同的令牌访问时,系统不会在redis中找到令牌,因此处理它并抛出未 认证的错误.

  • 用户更改密码时如何使同一用户的所有令牌无效?

  • 如何实现从所有设备注销功能?

    解决方案:当我们在 redis 中存储令牌时,我们必须搜索与给定用户相关的所有令牌并将其从 redis 中删除或在用户登录时也将令牌存储在数据库中,找出与用户相关的所有令牌,获取令牌 ID 和从redis中删除它们。存储在 db 中更好,因为 dbs 更擅长查找操作。

  • 我不知道解决您的问题的最佳解决方案,但是一旦您将令牌存储在服务器的内存中,您就不再拥有无状态身份验证机制。这对您来说可能没问题,但如果您需要扩展到多个服务器,您仍然会遇到传统的“会话亲和力”问题 (2认同)
  • 是的..!我同意,但是有什么方法可以解决上述问题呢?这些是每个应用程序应该实现的最低功能 (2认同)