JWT与阻塞用户

JWT与阻塞用户,jwt,Jwt,JWT是一种无状态身份验证机制,因为用户状态从未保存在服务器内存中 如果管理员出于某些原因阻止用户,如何使令牌无效?JWT不是一种身份验证机制,而是一种令牌格式。由于JWT是自包含的,因此可以将其用于无状态身份验证。然而,这并不意味着您的身份验证机制必须是无状态的(尽管它有其优点) 有几个选项可用于处理用户锁定/撤销授权: 在验证JWT之后,在每个请求中查找用户,以查看用户是否被锁定 访问令牌应该是短期的,因此您可以在下次请求新的访问令牌(例如,使用刷新令牌)时查找用户,然后拒绝发出新的访问令

JWT是一种无状态身份验证机制,因为用户状态从未保存在服务器内存中


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

JWT不是一种身份验证机制,而是一种令牌格式。由于JWT是自包含的,因此可以将其用于无状态身份验证。然而,这并不意味着您的身份验证机制必须是无状态的(尽管它有其优点)

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

  • 在验证JWT之后,在每个请求中查找用户,以查看用户是否被锁定
  • 访问令牌应该是短期的,因此您可以在下次请求新的访问令牌(例如,使用刷新令牌)时查找用户,然后拒绝发出新的访问令牌
  • 或者,通过将特定用户的
    jti
    存储在数据库中,您可以将为特定用户发行的所有令牌列入黑名单。另见:EDIT:正如评论中指出的,虽然这种方法不是严格无状态的,但仍然是有效的,因为黑名单只需要在黑名单令牌的生存期内存储黑名单令牌,并且查找应该是高效的。
  • 您可以在每N个请求中查找由特定JWT标识的用户,或者在JWT生命周期的X%已经过去时查找用户,而不是在每个请求中查找

这些方法都不是完全无状态的。通常,如果希望可以撤销授权,则无状态授权是不可能的。如果您希望您的令牌完全是无状态的,您应该确保它们的生存期尽可能短,并且发布新令牌不是无状态的。

在这种情况下,为什么要使用JWT,生成唯一的字符串/令牌并在每个请求上检查令牌有什么好处?请注意使用查找表查看用户是否经过身份验证的选项,它的成本和效率非常低!我认为与唯一令牌的主要区别在于,您不必保留所有令牌,只需撤销即可。如果令牌是短期的,那么被撤销令牌的列表将非常小。对于分布式系统,只需要广播撤销的令牌。