按用户名查找指定用户的所有令牌问题

Find all tokens issues for a specified user by username

如何通过用户名找到为某个用户颁发给所有客户端的所有令牌?

目前org.springframework.security.oauth2.provider.token.TokenStore只提供一种API方法允许username进行token搜索,即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的列表。

spring-security-oauth2TokenStore 的唯一实现 findTokensByUserNameJdbcTokenStore