Как использовать SpringAecurity OAuth2 за прокси-сервером, но использовать только ForwardedHeaderTransformer для компонентов OAuth - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь объединить Spring Cloud Gateway с Discovery Client и Spring Security с OAuth. У меня большая часть работы работает, за исключением того, что я не могу сделать и OAuth, и Discovery Client.

Когда я использую Discovery Client, он правильно разрешает службу, скажем, /v1/whoami отправляется в службу whoami, запрашивая /, когда я включаю безопасность, я получаю 404, когда он пытается запросить /oauth/authorization/google, как должно быть /v1/oauth/authorization/google

. Чтобы исправить вышесказанное, я добавляю это

    @Bean
    public ForwardedHeaderTransformer forwardedHeaderTransformer() {
        return new ForwardedHeaderTransformer();
    }

Однако, когда Я делаю так, что он будет искать / v1 / whoami как / v1 / whoami, которого не существует.

Я пытался создать и зарегистрировать этот класс, но он также не работает

public class ForwardedHeaderTransformerForOAuthOnly extends ForwardedHeaderTransformer {
    @Override
    public ServerHttpRequest apply(ServerHttpRequest request) {

        System.out.println(">>>> " + request.getPath().value());
        if (isOauth(request)) {
            System.out.println(">>>> IS OAUTH");
            return super.apply(request);
        }
        return request;
        //return super.apply(request);
    }

    private boolean isOauth(ServerHttpRequest request) {
        return request.getPath().value().startsWith("/oauth2/authorization/") || request.getPath().value().startsWith("/login/oauth2/code/");
    }
}

1 Ответ

0 голосов
/ 26 апреля 2020

Я заработал, добавив следующее, чтобы использовать префикс перед идентификатором службы.

spring:
  cloud:
    gateway:
      discovery:
        locator:
          predicates:
            - Path='/*/'+serviceId+'/**'
          filters:
            - StripPrefix=2

В сочетании с добавлением

@Bean
public ForwardedHeaderTransformer forwardedHeaderTransformer() {
    return new ForwardedHeaderTransformer();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...