多个访问令牌和一个刷新令牌

Bla*_*Log 4 spring spring-security oauth-2.0 spring-security-oauth2

我有多个移动客户端,它们都使用密码授予流程进行身份验证。为此,我只想使用一个非常持久的刷新令牌和多个短期访问令牌。我一直在尝试在春季使用 Password Grant 生成多个访问令牌,但是,每当我刷新访问令牌时,旧的访问令牌就会停止工作。我检查了数据库,对于该特定身份验证,oauth_access_token 表中始终只有一条记录。Spring Oauth2 不是应该为一个刷新令牌生成多个访问令牌吗?感谢您的帮助。

dur*_*dur 5

它受 OAuth2 规范支持,请参阅RFC 6749

1.5. 刷新令牌

刷新令牌是用于获取访问令牌的凭据。刷新令牌由授权服务器颁发给客户端,用于在当前访问令牌失效或过期时获取新的访问令牌,或获取具有相同或更窄范围的附加访问令牌(访问令牌可能具有较短的生命周期和比资源所有者授权的权限少)。

但是 Spring Security OAuth2 不支持,见DefaultTokenServices#refreshAccessToken

  // clear out any access tokens already associated with the refresh
  // token.
  tokenStore.removeAccessTokenUsingRefreshToken(refreshToken);
Run Code Online (Sandbox Code Playgroud)

TokenStore#removeAccessTokenUsingRefreshToken

使用刷新令牌删除访问令牌。此功能是必需的,因此不能使用刷新令牌来创建无限数量的访问令牌。

一种解决方法是实现自定义TokenStore.

  • 好答案。我们配置自定义令牌存储的方式是,在通过刷新令牌删除时,仅删除过期的访问令牌。这样,您可以拥有多个设备,同一用户共享相同的刷新令牌,但每个设备都有一个单独的访问令牌。 (2认同)