В настоящее время я разрабатываю приложение на основе архитектуры микросервиса. Мы используем API-шлюз, реализованный с использованием Spring Cloud Netfix Zuul Server для маршрутизации запросов к нашим микросервисам.
Чтобы реализовать единый вход для всех наших сервисов, я в настоящее время работаю над сервером OAuth2, настроенным с использованием Spring Cloud Security. Сервер в основном просто копирует и прошёл реализацию в Dave Syer Repo: https://github.com/dsyer/spring-security-angular/tree/master/oauth2/authserver
Основное различие заключается в том, что я хочу перенаправить запросы на мой сервер OAuth через Zuul Proxy. Таким образом, мне не придется напрямую открывать мой сервер OAuth и динамически добавлять и удалять Login Server.
Проблема в том, что я не разбираюсь, чтобы понять, как правильно настроить эту настройку. Когда я пытаюсь получить доступ к защищенному ресурсу на сервере OAuth, я пересылаюсь на страницу входа. Это, конечно, так, как ожидалось. Но я не могу понять, как установить имя хоста и порт, используемые при пересылке. Я хочу, чтобы сервер перешел на конечную точку на сервере Zuul, который будет перенаправлен обратно на сервер OAuth. (API-шлюз Zuul API должен быть единственным сервером, с которым когда-либо разговаривал клиент. Все остальное будет скрыто.)
Поскольку хост и порт считываются из HttpServletRequest
в LoginUrlAuthenticationEntryPoint
. Но запрос, который видит сервер, - это запрос, отправленный прокси-сервером Zuul. Поэтому я перенаправлен на внутренний IP-адрес, а не на конечную точку на прокси-сервере.
Я попытался установить URL-адрес страницы входа в WebSecurityConfigurerAdapter.configure(HttpSecurity)
на абсолютный URL-адрес моего Zuul Proxy. Но это только заставило мое приложение жаловаться на слишком много перенаправлений. (Возможно, это вызвало петлю).
Какой был бы лучший способ настроить это?
- Должен ли я реализовывать какую-то собственную стратегию переадресации, переопределяя компонент?
- Есть ли вариант конфигурации, который мне не хватает?
- Является ли моя идея неправильной? (В своем ответе на " Как избежать перенаправления на другой хост с Зуулом?" Дэйв Сиер говорит, что вы обычно не проксируете это, но не объясняете почему.)