JWT 和阻止用户

Rom*_*per 6 jwt

JWT 是一种无状态身份验证机制,因为用户状态永远不会保存在服务器内存中。

如果管理员因某些原因阻止用户,如何使令牌失效?

Flo*_*ter 3

JWT 不是一种身份验证机制,而是一种令牌格式。由于 JWT 是独立的,因此您可以使用它们进行无状态身份验证。然而,这并不意味着您的身份验证机制必须是无状态的(尽管它有它的好处)。

有多种选项可用于处理用户锁定/撤销授权:

  • 验证 JWT 后,在每个请求中查找用户,以查看用户是否被锁定
  • 访问令牌应该是短暂的,因此您可以在下次请求新的访问令牌时查找用户(例如,使用刷新令牌),然后拒绝颁发新的访问令牌
  • 或者,您可以通过将为特定用户颁发的所有令牌存储jti在数据库中来将其列入黑名单。另请参阅:https ://auth0.com/blog/denylist-json-web-token-api-keys/ 。编辑:正如评论中指出的,虽然不是严格无状态的,但这种方法仍然有效,因为黑名单只需要在其生命周期内存储黑名单令牌,并且查找应该非常高效。
  • 您可以每 N 个请求或 JWT 生命周期的 X% 过去时查找由特定 JWT 标识的用户,而不是在每个请求中都执行此操作。

这些方法都不是完全无状态的。一般来说,如果您希望可以撤销授权,则无状态授权是不可能的。如果你希望你的代币完全无状态,你应该确保它们的生命周期尽可能短,并且发行新的代币不是无状态的。

  • 在这种情况下,为什么要使用 JWT,生成唯一的字符串/令牌并在每个请求上检查令牌有什么好处? (5认同)