如何找到通过用户名发给所有客户的所有用户令牌?
当前,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-oauth2
的findTokensByUserName
的唯一实现是JdbcTokenStore
。