Spring Cloud Zuul + Undertow + OAuth2: невозможно войти в Zuul - PullRequest
0 голосов
/ 07 сентября 2018

Мы используем Spring Boot v2.0.4 + Spring Cloud (выпуск Finchley).

Мы развернули Zuul, Auth Server, Eureka и Config Server, каждый в своих отдельных приложениях / процессах. У нас развернуто полдюжины наших собственных сервисов. Мы используем аутентификацию OAuth2 для всех сервисов. Мы используем встроенный контейнер undertow для всех приложений.

Когда Zuul использует встроенный контейнер Undertow, мы не можем войти в систему - страница входа снова отображается, даже если учетные данные верны. Когда Zuul переключается на использование встроенного контейнера Tomcat, все работает правильно - вход приводит к правильной странице пользователя. (Все остальные приложения используют Undertow в обоих случаях.)

Когда мы отлаживаем запросы, поступающие через Zuul для Tomcat против Undertow, мы видим, что атрибут сеанса SPRING_SECURITY_CONTEXT устанавливается для Tomcat, но не устанавливается для Undertow. Я предполагаю, что это означает, что пользователь будет перенаправлен обратно на страницу входа, поэтому мы наблюдаем такое поведение.

Мы знаем, что это проблема с Zuul + Tomcat и Undertow, поскольку конфигурация всех других приложений остается точно такой же.

Есть идеи? Мы действительно ломаем голову над этим.

1 Ответ

0 голосов
/ 07 сентября 2018

Оказалось, что это было вызвано конфликтом имен файлов cookie JSESSIONID между Zuul и Auth Server. Поскольку контейнер Tomcat отличается от Wildfly для нескольких Set-Cookies с одним и тем же именем (что является нарушением RFC6265), мы видим это только сейчас.

Я должен был упомянуть, что мы настроили аутентификационный сервер за прокси-сервером Zuul, отсюда и множество файлов cookie JSESSIONID.

Мы исправили это сейчас, переименовав имя файла cookie JSESSIONID на всех внутренних серверах. Мы рассмотрим лучший способ сделать это для дальнейшего развертывания в рабочей среде, возможно, с помощью Spring Session. Любые предложения приветствуются.

...