有一个指南如何使用 Spring 和 Spring Boot 实现 OAuth2 https://spring.io/guides/tutorials/spring-boot-oauth2/
我需要在我的数据库中存储 OAuth2 信息,例如 accessToken、refreshToken 以供将来使用。现在我只能得到accessToken。根据本指南,我无法弄清楚如何获取 refreshToken 。
使用本指南中描述的方法获取 refreshToken 的正确方法是什么?
更新
我可以访问refreshToken
inOAuth2ClientAuthenticationProcessingFilter.attemptAuthentication
方法,但只能accessToken
访问ResourceServerTokenServices.loadAuthentication
方法。
现在我不明白如何在 Facebook 成功授权后基于这种方法获取 OAuth2 信息并将其重用于 Facebook API 调用。请指教。
更新
我已添加JdbcClientTokenServices
到我的 SSO 过滤器,但它不起作用
private Filter ssoFilter(ClientResources client, String path) {
OAuth2ClientAuthenticationProcessingFilter clientFilter = new OAuth2ClientAuthenticationProcessingFilter(path);
OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext);
//
AccessTokenProviderChain tokenProviderChain = new AccessTokenProviderChain(new ArrayList<>(Arrays.asList(new AuthorizationCodeAccessTokenProvider())));
tokenProviderChain.setClientTokenServices(new JdbcClientTokenServices(dataSource));
oAuth2RestTemplate.setAccessTokenProvider(tokenProviderChain);
//
clientFilter.setRestTemplate(oAuth2RestTemplate);
clientFilter.setTokenServices(new OkUserInfoTokenServices(okService, client.getClient().getClientId(), apiUrl, eventService));
clientFilter.setAuthenticationSuccessHandler(new UrlParameterAuthenticationHandler());
return clientFilter;
}