Настроить запросы в Spring Cloud Gateway

Насколько я понимаю, Spring Cloud Gateway должен реализовать HTTP-клиент для выполнения запросов обратного прокси. Spring framework предоставляет именно это, WebClient. Я не знаю, действительно ли Spring Cloud Gateway использует его для внутренних целей.

Если да, то можно ли получить доступ к экземпляру WebClient? Это позволит настроить атрибуты клиента. Одна из возможностей - предоставить авторизованного клиента OAuth2 для настройки запросов с заголовком авторизации, как в здесь:

WebClient webClient;
@RegisteredOAuth2AuthorizedClient("client-id") OAuth2AuthorizedClient authorizedClient;

this.webClient
            .get()
            .uri(this.uri)
            .attributes(oauth2AuthorizedClient(authorizedClient));

Это необходимо для интеграции с типом разрешения на авторизацию пароля, Spring не предоставляет способ сделать это плавно. Здесь вы можно узнать больше об этом сценарии.


person rigon    schedule 13.01.2020    source источник
comment
В настоящее время он не использует WebClient. Тем не менее, вы можете получить доступ к запросу через ServerWebExchange в фильтре для добавления / изменения / удаления заголовков запроса.   -  person spencergibb    schedule 13.01.2020


Ответы (1)


На самом деле нет необходимости перехватывать ваши звонки вручную. Существует множество руководств, в которых рассказывается, как включить авторизацию OAuth2 в Spring Cloud Gateway. Вы можете подписаться на эта часть официального руководства. Вы можете найти что-нибудь полезное на эту страницу с рекомендациями по Okta. Или вот код, который я использовал:

/**
 * OAuth2.0 authorization filter setup.
 *
 * @param http
 * @return security filter
 */
@Bean
@ConditionalOnMissingBean
public SecurityWebFilterChain springSecurityFilterChainWithAuth(ServerHttpSecurity http) {
    http
            .authorizeExchange()
            .anyExchange().authenticated()
            .and()
            .oauth2ResourceServer()
            .jwt();
    return http.build();
}

Дополнительная конфигурация в файле свойств:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: [your_uri_here]
person Stepan Tsybulski    schedule 13.01.2020
comment
Спасибо за Ваш ответ. На самом деле я пробовал ваш сценарий пару раз, и его очень легко настроить. Я забыл упомянуть, что пытаюсь использовать тип разрешения авторизации пароля (плохо, обновлю вопрос). При этом я не могу найти способ его настроить. Если вы можете поделиться некоторыми идеями о том, что я делаю не так, я буду очень рад. Здесь вы найдете более подробную информацию о: stackoverflow.com/questions/59643201/ - person rigon; 13.01.2020
comment
@rigon, теперь у меня твоя проблема. Мне никогда не требовалось предоставить разрешение на авторизацию пароля, поэтому, к сожалению, я не могу вам помочь. Я вижу, что вы провели тщательное расследование, и если прямо сейчас нет готовой конфигурации, то ваше решение является хорошим. На самом деле это не выглядит таким грязным. Я думаю, что вы можете жить с этим сейчас и заменить его, когда в следующем выпуске появится лучший подход. - person Stepan Tsybulski; 13.01.2020