Фильтр предварительной авторизации Spring Security в Zuul для установления и совместного использования сеанса

Я работаю в команде разработчиков над крупномасштабным проектом, в котором используются микросервисы на базе Spring. Недавно мы обнаружили проект Spring Cloud и экспериментируем с внедрением сервисов Netflix, Zuul, Eureka, Ribbon и т. д.

В нашей среде ни у кого не будет доступа к домену, на котором будет работать наше приложение, пока они не будут предварительно авторизованы через внешний сервис. Как только они достигнут нашего приложения, мы сможем получить личность пользователя через токен заголовка, предоставленный службой авторизации.

Я хотел бы настроить Zuul с помощью Spring Security, используя фильтр предварительной проверки подлинности для установления сеанса пользователя, и использовать Spring Session, чтобы сделать сеанс доступным для всех серверных микросервисов.

Это законный подход? Единственная информация, которую я вижу о безопасности Zuul, — это возможность прокси-токенов OAuth2 для серверных служб, но нам не нужен OAuth2. Есть ли лучший способ установить сеанс пользователя и поделиться им со всеми службами в нашей внутренней архитектуре?


person Bal    schedule 20.09.2015    source источник


Ответы (2)


Ознакомьтесь со следующим учебником.

Вы можете перейти к коду на GitHub.

Мне удалось запустить проект, и сейчас я занимаюсь модификацией аутентификации в памяти для использования Ldap. Я новичок в Java и нашел этот учебник довольно простым.

Ваш,

Майк Ковальски

person Michael Kowalski    schedule 24.09.2015
comment
Спасибо, Михаил, я сам наткнулся на это. На самом деле я настроил и запустил свою среду — Zuul использует фильтр Spring Security Preauth и передает сеанс в Redis. Мой микросервис также использует Spring Session и Spring Security и правильно выбирает принципала пользователя для запросов после аутентификации через Zuul. - person Bal; 24.09.2015
comment
Удалось ли вам интегрировать ldap в примеры? ты - person wmfairuz; 02.12.2015
comment
Пожалуйста, взгляните на мой ответ, найденный здесь stackoverflow.com/questions/32751094/ Я успешно подключаюсь к ldap. - person Michael Kowalski; 03.12.2015

Как и вам, мне не нужен был OAuth, и я сразу обнаружил, что Zuul не поддерживает аутентификацию без OAuth. Я хотел вызвать службу аутентификации, не теряя возможности обнаружения Spring Cloud и балансировки нагрузки на стороне клиента. Я добился этого, украсив RibbonRoutingFilter следующим образом. Обратите внимание, что этот подход требует, чтобы исходный RibbonRoutingFilter был отключен, что можно сделать с помощью одной строки в application.yml: zuul.RibbonRoutingFilter.route.disable: true

По сути, я создаю резервную копию исходного идентификатора службы и перезаписываю его идентификатором службы аутентификации, прежде чем делегировать запрос исходному RibbonRoutingFilter. Если авторизация прошла успешно, я восстанавливаю исходный идентификатор службы и снова делегирую запрос исходному RibbonRoutingFilter. Если авторизация не удалась, я возвращаю ошибку. Полный код на моем GitHub: AuthAwareRoutingFilter.java

person Abhijit Sarkar    schedule 22.05.2016