2017-08-08 81 views
0

我们的应用程序中有一项要求: 当用户更改其密码时,应重新设置所有其他设备或计算机的其他登录名已认证(除当前用户的会话)。如何在使用Jersey和OAuth2更改密码时撤销用户的所有令牌

我在下面看到(下面提供的链接和引用的段落是相关的),并得到了这样的想法:撤销用户的所有令牌。
但不知道如何实现这一点(撤销所有的令牌)。我们正在使用Jersey和OAuth2。 撤销令牌意味着从会话和cookie中删除现有的访问令牌/刷新令牌。那么换成新的令牌?

感谢

Best practice for REST token-based authentication with JAX-RS and Jersey

[与JAX-RS新泽西州的REST基于令牌的认证和最佳实践]使用撤销凭证与智威汤逊

如果你想撤销令牌,你必须保持他们的轨道。您不需要在服务器端存储整个令牌,只存储 令牌标识符(必须是唯一的)和一些元数据(如果需要)。 对于令牌标识符,您可以使用UUID。

应该使用jti声明将标记标识符存储在 标记中。在验证令牌时,通过检查您在服务器端的令牌标识符 上的jti声明值,确保它未被吊销 。

出于安全考虑,当用户更改其密码时撤销所有令牌。

回答

1

一般来说(不仅是泽西岛),你必须在更改密码时使用户生成的所有令牌无效。

但不知道如何实现这个(撤销所有标记)

这意味着,你必须expire在该用户的OAuth的服务器数据库中的每个发出的令牌:

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

撤销令牌是指从会话和cookie中删除现有的访问令牌/刷新令牌。那么换成新的令牌?

排序的,撤销方式:

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

然后换成新的令牌?

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

  • 通过的oauth2服务器(重认证重定向到登录页面部分)。
  • 或返回access_denied错误(在服务API的情况下)
相关问题