Есть ли способ поддерживать несколько сторонних токенов OAuth2 в разных операциях OAuth2RestOperations? - PullRequest
0 голосов
/ 18 июня 2019

Я хочу, чтобы мой бэкэнд-сервис мог использовать единый вход в несколько сторонних 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.

...