Я хочу, чтобы мой бэкэнд-сервис мог использовать единый вход в несколько сторонних API для доступа к своим ресурсам.Как мне использовать два разных компонента OAuth2RestOperation?
Я пишу бэкэнд-сервис, который будет использовать Twitch и Spotify API.Прямо сейчас у меня работает поток кода авторизации для Twitch API, поскольку я могу войти в Twitch через поток входа в систему единого входа.Я также хочу добавить кнопку для входа в Spotify, чтобы активировать возможности Spotify моего сервера.Я не могу использовать токен потока клиента, так как для некоторых запросов API требуется пользователь.
Сейчас моя конфигурация безопасности настроена, как показано ниже.Я переопределил OAuth2RestOperations
, так как мне нужно, чтобы он был одноэлементным, чтобы к нему можно было обращаться в нескольких потоках.Поскольку он основывался на сеансах, это вызывало у меня проблемы в потоках.
@Configuration
@EnableOAuth2Sso
@EnableOAuth2Client
@Order(value = 0)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Resource
@Qualifier("accessTokenRequest")
private AccessTokenRequest accessTokenRequest;
@Bean
@Primary
public OAuth2RestOperations oAuth2RestOperations(OAuth2ClientContext oauth2ClientContext,
OAuth2ProtectedResourceDetails details) {
OAuth2RestTemplate template = new OAuth2RestTemplate(details,
oauth2ClientContext);
return template;
}
@Bean
public OAuth2ClientContextFilter oauth2ClientContextFilter() {
OAuth2ClientContextFilter filter = new OAuth2ClientContextFilter();
return filter;
}
@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
protected AccessTokenRequest accessTokenRequest(@Value("#{request.parameterMap}")
Map<String, String[]> parameters, @Value("#{request.getAttribute('currentUri')}")
String currentUri) {
DefaultAccessTokenRequest request = new DefaultAccessTokenRequest(parameters);
request.setCurrentUri(currentUri);
return request;
}
@Bean
@Primary
public OAuth2ClientContext oauth2ClientContext(AccessTokenRequest accessTokenRequest) {
return new DefaultOAuth2ClientContext(accessTokenRequest);
}
}
Я думаю, что мне просто нужно иметь несколько конфигураций bean-компонентов с разными квалификаторами.Но мне интересно, как я мог вручную пройти через поток SSO при выборе получения токена Spotify после пения в Twitch.