【发布时间】:2021-10-24 05:18:40
【问题描述】:
我正在使用 spring-boot-starter-oauth2-client 向 Google 验证我的用户。这很好用,我可以按预期登录并获得有效的访问权限和刷新令牌。
我正在创建访问令牌:
public class TokenServiceImpl implements TokenService {
private final OAuth2AuthorizedClientService clientService;
@Override
public GoogleCredentials credentials() {
final var accessToken = getAccessToken();
return getGoogleCredentials(accessToken);
}
private GoogleCredentials getGoogleCredentials(String accessToken) {
return GoogleCredentials
.newBuilder()
.setAccessToken(new AccessToken(accessToken, null))
.build();
}
private String getAccessToken() {
final var oauthToken = (OAuth2AuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
return clientService.loadAuthorizedClient(
oauthToken.getAuthorizedClientRegistrationId(),
oauthToken.getName()).getAccessToken().getTokenValue();
}
}
令牌最终被用于 Google Photo API 客户端
private PhotosLibraryClient getClient() {
final var settings =
PhotosLibrarySettings
.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(tokenService.credentials()))
.build();
return PhotosLibraryClient.initialize(settings);
}
问题是令牌将在短时间内过期,我想刷新它以使其保持活动状态。
我不确定我可以使用哪种方法模式来执行此操作,而不必编写整个 OAuth 流程(违背了 Spring oauth2-client 之类的目的)。
到目前为止,我的应用程序中没有其他令牌/安全/过滤器逻辑。
我只需要手动写出来,还是有其他方法可以做到这一点?
【问题讨论】:
-
可能有设置。您应该检查
OAuth2AuthorizedClientService实现。您正在使用的服务只存储它看起来的信息。可能有更高的组件可以使用。
标签: java spring-boot spring-security spring-security-oauth2