Spring Security每次都返回相同的令牌

时间:2019-06-26 11:39:19

标签: java spring spring-boot spring-security-oauth2

我们在项目中使用spring安全性(Authorisation and Resource server)。

  1. 客户端发送带有oauth2参数的令牌请求(/ oauth / token)。

  2. spring security app为用户创建令牌,并使用access_token,refresh_token,自定义用户对象(名称,组织,电子邮件等)和权限(角色)来响应客户端。

  3. 客户端添加其他角色(例如ROLE_CLIENT,ROLE_USER)。

  4. spring应用程序将为给定用户存储以上角色。

  5. 下次客户端发送令牌请求时,spring security将返回先前创建的令牌(尚未过期)以及用户和权限信息。该权限信息没有最新角色(在步骤4中添加)。

这里的spring安全性总是使用现有令牌(因为它没有过期)并返回有效令牌。即使正在修改用户对象,这也是预期的行为吗?

1 个答案:

答案 0 :(得分:1)

如果您希望下一个请求获取具有新角色的新访问令牌,并且不返回具有现有角色的现有令牌,则听起来好像您需要撤销用户角色更改时的访问令牌。

在更新用户角色时,您可能想撤消令牌。 我还没有亲自测试过,但是我在这里https://www.baeldung.com/spring-security-oauth-revoke-tokens找到了指南,因此您的里程可能会有所不同。

我想补充一点,这听起来不像正常的OAuth2流程,您可能在这里违反了一些约定,以后可能会咬到您。就是说,如果您对所建议的解决方案有信心,则不必遵循标准。

编辑:为弄清用户角色,访问通常是资源的一部分,而不是令牌交换的一部分。例如,您有一个普通的OAuth2请求,该请求会生成一个令牌,您可以将其交换为访问令牌,如步骤1和2所示。然后,您通常会使用该访问令牌并从资源中请求用户访问信息例如“ userinfo”服务或类似内容。

您的安全服务也可以是资源服务器,但是两个步骤应该被视为不同。然后,当您想要修改用户角色时,可以通过资源再次执行此操作。这意味着下次您调用资源时,它将具有最新信息,而无需再次验证用户身份。