Как аутентифицировать двух клиентов одновременно с помощью JASIG SSO - PullRequest
0 голосов
/ 06 сентября 2018

Честно говоря, не уверен, что заголовок достаточно описательный, поэтому вот текст:

Предыстория

Я перестраиваю веб-приложение, используя среду Spring. Однако старое приложение работает на PHP.

Есть льготный период, когда оба приложения будут работать одновременно, поэтому я буду медленно перемещать материал в сторону Java и от PHP.

К счастью для меня, большая часть связи между тылом и веб-интерфейсом осуществляется через jQuery и AJAX. Я уже настроил множество конечных точек отдыха, чтобы позаботиться о чтении, и сохранение было следующим в моем списке.

Проблема

Теперь возникает проблема, из-за которой моему приложению Spring необходимо знать, действительно ли вошедшему в систему пользователю разрешено сохранять данные. Коллега предложил мне использовать Jasig CAS SSO в качестве аутентификации, чтобы приложение php и java использовали одинаковый логин.

Однако в этом и заключается проблема. Я настроил Spring Security для работы с SSO, а также PHP знает, как вести себя с ним. Однако проблема возникает, когда я делаю AJAX-запрос к Spring. Spring Security обнаруживает, что я не вошел в систему (возможно, из-за отсутствия отправляемых файлов cookie) и, таким образом, возвращает 302, чтобы я мог перейти на страницу входа в CAS.

Мне удалось запустить все в одном (не обращенном наружу) домене:

  • cas.domain.local
  • app.domain.local (PHP)
  • tools.domain.local (Java)

Запросы поступают из app.domain.local в tools.domain.local

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

Вопрос

Какой мой лучший способ сообщить стороне java через запрос ajax, что я уже аутентифицирован на сервере SS SSO?

Пожалуйста, спросите, требуется ли дополнительная информация. Это мой первый вопрос о переполнении стека, и я не знаю, как все это сформулировать.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Не думаю, что в этом случае вы будете довольны CAS. Моим лучшим предположением было бы выбрать JWT для обработки вашей аутентификации. JWT'S может инкапсулировать ваши данные аутентификации безопасным способом, и вы можете отправить их через Http-заголовок обоим приложениям или через cookie, который вы установили на супердомене domain.local, чтобы оба домена получили его. Вы по-прежнему можете использовать два отдельных "локальных" сеанса для своих приложений.

0 голосов
/ 21 декабря 2018

Итак, в конце концов я понял, что все работает , включая аутентификацию на стороне AJAX, но у меня все настройки неверны.

Очевидно, https://cas.local/cas - это конечная точка, отличная от https://cas.local/cas/. Это привело к тому, что файлы cookie не были распознаны в данном конкретном случае.

Мне потребовалось несколько дней, чтобы разобраться.

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

Вам нужно будет добавить некоторые настройки в spring-security. Нажмите здесь , чтобы увидеть документ.

...