Я настраиваю приложение Spring Cloud (Angel.SR6) с помощью утилиты обратного прокси Zuul, чтобы скрыть внутренние служебные порты. Моя служба zuul (edge) опубликована в порту 8765, а служба моих организаций - в порту 8083. Все идет гладко, когда я обращаюсь к приложению без защиты, http://localhost:8765/organization/organizations
возвращает JSON со всеми организациями.
Однако теперь я хочу интегрировать сервер Keycloak SSO (OAuth2) для авторизации. Я добавил адаптер Spring Security в сервисе моей организации и настроил его для аутентификации в http://localhost:8080/auth
. Все идет хорошо, за исключением того, что zuul выполняет перенаправление вместо проксирования. Поэтому, когда аутентификация прошла успешно, меня перенаправляют на http://localhost:8083/organizations
вместо http://localhost:8765/organization/organizations
. Вот мои запросы браузера:
Это потому, что адаптер keycloak создает конечную точку проверки токена в http://localhost:8083/sso/login
, из которой он выполняет перенаправление на сервер авторизации для проверки токена. Когда сервер авторизации подтверждает это, в службу организации отправляется перенаправление с путем /organization
, поэтому загружаемый конечный URL-адрес равен http://localhost:8083/organizations
. Но я бы хотел, чтобы вместо этого загружался первый запрошенный URL.
Какой у меня выбор?
/auth/realm/master?redirectUri=http://localhost:8083/sso/login
. Таким образом, сервер SSO выполняет перенаправление на этот URL-адрес, который также перенаправляет на последнийhttp://localhost:8083/organizations
путь. Решением было бы защитить только службу zuul, поэтому я бы перенаправлял каждый запрос на сам zuul, но для этого нужно было бы оставить остальные службы открытыми. - person Xtreme Biker   schedule 21.05.2016