Spring Netflix Zuul: аутентификация и маршрутизация одного и того же запроса

У меня есть куча сервисов, которые стоят за пограничным сервером Zuul. Пограничный сервер Zuul также выполняет аутентификацию. Сеанс используется всеми службами, использующими Spring Session. Я хочу иметь возможность аутентифицировать и направлять запрос службе в том же потоке. Я просмотрел руководство Дэйва Сайера где сервер шлюза может аутентифицировать и маршрутизировать запросы.

В этом проекте работают следующие команды:

  • curl -u admin:admin http://localhost:8080/user
  • curl -c cookie.txt -u admin:admin http://localhost:8080/user && curl -b cookie.txt http://localhost:8080/admin/user

Я ожидал, что это тоже сработает, но это не так:

  • curl -u admin:admin http://localhost:8080/admin/user

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

Вот что я вижу в журналах службы администрирования:

o.s.s.w.a.www.BasicAuthenticationFilter  : Basic Authentication Authorization header found for user 'admin'
o.s.s.authentication.ProviderManager     : Authentication attempt using org.springframework.security.authentication.dao.DaoAuthenticationProvider
o.s.s.a.dao.DaoAuthenticationProvider    : User 'admin' not found
o.s.s.w.a.www.BasicAuthenticationFilter  : Authentication request for failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials

Я получаю ответ HTTP 401 Unauthorized.

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

Есть ли способ добиться этого?

ОБНОВЛЕНИЕ

Я думаю, что это не может работать из-за того, как Spring Session реализован для сохранения сеанса. Я жду ответа на мой вопрос на github.


person cryptonite    schedule 24.12.2015    source источник
comment
Проходит ли шаблон URL-адреса admin/user через фильтры пружинной безопасности в шлюзе без аутентификации? Настроен ли он для начала аутентификации?   -  person Ahamed Mustafa M    schedule 27.12.2015
comment
@AhamedMustafaM Нет, не может. Он защищен базовой аутентификацией.   -  person cryptonite    schedule 28.12.2015
comment
Я разрабатываю очень похожую архитектуру. Было бы неплохо, если бы первый вызов мог аутентифицироваться и получить доступ к сервису через zuul. В настоящее время я только что установил конечную точку входа в систему mu zuul, которая не требует перехода к другой службе. Это все еще необязательный шаг, но, по крайней мере, он имеет логическое значение для клиентов, пытающихся получить доступ к API.   -  person Tim Schimandle    schedule 04.01.2016
comment
Думаю, решение уже реализовано в spring-session версии 1.1.0. Дополнительная информация в другом вопросе stackoverflow.com/questions/34751700/   -  person shobull    schedule 25.09.2016