У меня есть базовое приложение OAuth2:
@Configuration
@EnableOAuth2Sso
@Order(0)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.antMatchers("/actuator/health", "/", "/noauth", "/login").permitAll()
.anyRequest().authenticated().and()
.oauth2Login().defaultSuccessUrl("/auth");
}
}
Это хорошо работает для одного экземпляра, и я могу запросить OAuth2AuthorizedClient
детали:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
OAuth2AuthenticationToken oauthToken = (OAuth2AuthenticationToken) authentication;
OAuth2AuthorizedClient client = clientService.loadAuthorizedClient(
oauthToken.getAuthorizedClientRegistrationId(), oauthToken.getName());
// Gets an OAuth2 token
client.getAccessToken().getTokenValue()
Однако, если язапустите это в среде микросервисов (> 1 экземпляр), тогда client
всегда будет нулевым.Аутентификация также не работает правильно в этом случае.
Я использую библиотеку org.springframework.security:spring-security-oauth2-jose
и аутентифицируюсь с помощью Google.
Любые подсказки о том, как сохранить токен носителя между сеансами (или обновитьэто если его там нет)?