AADAuthenticationFilter вызывается только один раз - PullRequest
0 голосов
/ 15 февраля 2020

Я скачал Azure AD с пружинной загрузкой с https://github.com/microsoft/azure-spring-boot. Все хорошо и работает хорошо, пока я запускаю azure-active-directory-spring-boot-sample, используя

mvn spring-boot:run

, как показано в файле README.

Я пробую просто базовый c реальный сценарий, в котором приложение angular / реагирует работает отдельно на отдельном порту, используя npm. В тот момент, когда я отделил их от основного фильтра AADAuthenticationFilter, он вызывается только один раз при первом запросе, когда он выполняет проверку токена, и никогда больше для последующих запросов.

Я обошел и настроил прокси nginx так, чтобы домены этих двух теперь были одинаковыми localhost:9999, и я перенаправляю на основе следующего пути, например web для npm и app для весны загрузки. Это позволило куки быть доступны при каждом запросе.

Это помогает, потому что я узнал, что Spring использует куки для поддержки сеанса. Но в идеале фильтр AAD должен проверять токен каждый запрос.

Но если я добавлю свойство azure.activedirectory.session-stateless=true в мои application.properties, как указано в коде фильтра, чтобы сделать его без сохранения состояния и проверять его при каждом запросе. Он ожидает роли в качестве другого атрибута в AD, а не в качестве группы пользователей.

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

Буду признателен за любую помощь или указатели.

1 Ответ

0 голосов
/ 16 февраля 2020

Я понимаю, что для решения вышеуказанной проблемы может потребоваться гораздо больше информации. Но я только смог решить это - по крайней мере, нашел проблему, которая его вызывала. Как я уже упоминал ранее, проблема началась, когда я разделил клиентский и весенний API. А так как клиент не смог отослать файлы cookie, установленные сервером, из-за изменения доменов мне пришлось установить прокси-сервер. Позже я обнаружил, что каждый GET запрос всегда вызывал фильтр AAD. Даже несколько запросов. Но другие запросы типа POST, PUT не выполнялись. Я попытался отключить конфигурацию csrf весной WebSecurityConfig.java -->> http.csrf().disable(); Это решило мою проблему, и теперь я получаю запрос, и все работает, как ожидалось. Сейчас я пытаюсь выяснить, как не отключить CSRF полностью. Спасибо

...