按用户名查找指定用户的所有令牌问题
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-oauth2
中 TokenStore
的唯一实现 findTokensByUserName
是 JdbcTokenStore
。
如何通过用户名找到为某个用户颁发给所有客户端的所有令牌?
目前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-oauth2
中 TokenStore
的唯一实现 findTokensByUserName
是 JdbcTokenStore
。