如何在用户使用Jersey和OAuth2更改密码时撤消用户的所有令牌

时间:2017-08-08 12:52:42

标签: security oauth-2.0 jersey token

我们的申请中有要求: 当用户更改其密码时,应重新验证所有其他登录(来自其他设备或计算机)(当前用户的会话除外)。

我在下面阅读(下面提供的链接并引用了相关的段落)并得到了一个想法:撤销用户的所有令牌。
但不确定如何实现这一点(撤销所有令牌)。我们正在使用Jersey和OAuth2。 撤消令牌是否意味着从会话和cookie中删除现有的访问令牌/刷新令牌。然后换上新的令牌?

由于

[使用JAX-RS和Jersey进行基于REST令牌的身份验证的最佳实践] Best practice for REST token-based authentication with JAX-RS and Jersey

  

使用JWT处理令牌撤销

     

如果要撤消令牌,则必须跟踪它们。您   不需要将整个令牌存储在服务器端,只存储   令牌标识符(必须是唯一的)和一些元数据(如果需要)。   对于令牌标识符,您可以使用UUID。

     

jti声明应该用于存储令牌标识符   令牌。验证令牌时,请确保它尚未被撤销   通过检查令牌标识符的jti声明的值   你有服务器端。

     

出于安全考虑,请撤消用户的所有令牌   更改密码。

1 个答案:

答案 0 :(得分:1)

一般情况下(不仅使用Jersey),您必须在更改密码时使为用户生成的所有令牌无效。

  

但不确定如何实现(撤销所有令牌)

这意味着您的oauth-server数据库中为该用户必须expire每个已发布的令牌:

  • 关系数据库:批量更新。
  • noSQL:单个删除引用。
  • Redis或类似的,一种力量驱逐。
  

撤消令牌是否意味着从会话和cookie中删除现有的访问令牌/刷新令牌。然后换上新的令牌?

排序,撤销意味着:

  • 从数据库中过期(不必要删除)所有已发布的令牌。
  • 会话和Cookie必须知道这一点,并在您检测到时将其删除或标记为已过期(通常是一个棘手的部分)。
  

然后换上新的令牌?

在大多数情况下,在此之后,当用户想要访问受保护资源时,您的安全过滤器/图层必须:

  • 通过oauth2服务器(重新认证部分)重定向到登录页面。
  • 或返回access_denied错误(如果是服务,API)