如何找到通过用户名发给所有客户的所有用户令牌?

当前,org.springframework.security.oauth2.provider.token.TokenStore仅提供一种API方法,该方法允许通过username(即findTokensByClientIdAndUserName)进行令牌搜索。

为了搜索发行给所有客户端的所有令牌,需要遍历一系列已知客户端。

是否有更好的方法来按用户名获取所有令牌?

更新:就我而言,我正在使用RedisTokenStore

最佳答案

适用于TokenStore的每种实现的通用解决方案是为每个注册的客户端使用TokenStore#findTokensByClientIdAndUserName

如果使用ClientRegistrationService的实现,则可以利用ClientRegistrationService#listClientDetails遍历客户端列表并查找发给每个客户端的令牌:

for (ClientDetails client : clientRegistrationService.listClientDetails()) {
    for (final OAuth2AccessToken token : tokenStore.findTokensByClientIdAndUserName(clientId, email)) {
        tokenStore.removeRefreshToken(token.getRefreshToken());
        tokenStore.removeAccessToken(token);
    }
}


如果不使用ClientRegistrationService,则需要自己维护clientIds列表。

TokenStore中具有spring-security-oauth2findTokensByUserName的唯一实现是JdbcTokenStore

10-08 01:19