Честно говоря, не уверен, что заголовок достаточно описательный, поэтому здесь идет текст:
Предыстория
Я перестраиваю веб-приложение, используя среду Spring. Однако старое приложение работает на PHP.
Есть льготный период, когда оба приложения будут работать одновременно, поэтому я буду медленно перемещать материал в сторону Java и от PHP.
К счастью для меня, большая часть связи между тылом и внешним интерфейсом была сделана через JQuery и AJAX.
Я уже настроил множество конечных точек отдыха, чтобы позаботиться о чтении, и сохранение было следующим в моем списке.
Эта проблема
Теперь возникает проблема, что моему приложению Spring необходимо знать, действительно ли вошедшему в систему пользователю разрешено сохранять данные.
Коллега предложил мне использовать Jasig CAS SSO в качестве аутентификации, так что приложение php и java будут использовать один и тот же логин.
Однако в этом и заключается проблема. Я настроил Spring Security для работы с SSO, а также PHP знает, как вести себя с ним. Однако проблема возникает, когда я делаю AJAX-запрос к стороне Spring. Spring Security обнаруживает, что я не вошел в систему (возможно, из-за того, что куки не отправляются) и, таким образом, возвращает 302, чтобы я перешел на страницу входа в CAS.
Мне удалось запустить все в одном (не обращенном наружу) домене:
Запросы поступают из app.domain.local в tools.domain.local
Я много читал о cookie-файлах для выдачи билетов, билетах о выдаче билетов, отправке информации о сеансе в моем запросе ajax, а также о том, что называется прокси-сервером аутентификации.
Вопрос
Какой мой лучший способ сообщить стороне java через запрос ajax, что я уже аутентифицирован на сервере SS SSO?
Пожалуйста, спросите, требуется ли дополнительная информация. Это мой первый вопрос о переполнении стека, и я не знаю, как все это сформулировать.
Вам нужно будет добавить некоторые настройки spring-security
,
Нажмите Вот чтобы увидеть документ.
Я не думаю, что вы будете довольны CAS в этом случае.
Моим лучшим предположением было бы JWT-х обрабатывать вашу аутентификацию. JWT’S может инкапсулировать ваши данные аутентификации безопасным способом, и вы можете отправить их через Http-заголовок обоим приложениям или через cookie, который вы установили на супердомене. domain.local
так что оба домена получают это. Вы по-прежнему можете использовать два отдельных «локальных» сеанса для своих приложений.
Так что в конце концов я понял, что все было работает, включая аутентификацию на стороне AJAX, но у меня все конфиги были неверные.
По-видимому https://cas.local/cas
это другая конечная точка, чем https://cas.local/cas/
,
Это привело к тому, что куки не были распознаны в данном конкретном случае.
Мне потребовалось несколько дней, чтобы понять это.