Siteminder SSO + Spring Security + Angular JS

Я видел много примеров, когда есть настраиваемая страница входа с Angular JS, а затем мы делаем вызов POST с именем пользователя/паролем, а затем Spring аутентифицируется на основе любой службы аутентификации, которую мы предоставляем. Затем мы получаем успех, получаем объект пользователя из Spring Security, а затем создаем файл cookie сеанса в Angular. https://github.com/witoldsz/angular-http-auth/blob/master/src/http-auth-interceptor.js

Я также видел интеграцию Siteminder с Spring Security, когда мы устанавливаем агент политики на веб-сервере, а затем получаем заголовки запросов с помощью Spring Security, а затем извлекаем роли и создаем объект профиля пользователя.

Я ищу решение, в котором я могу объединить оба вышеперечисленных. Это сценарий:

Когда пользователь запрашивает index.html (Angular), агент политики на веб-сервере перехватывает его, аутентифицирует на странице входа в систему Siteminder, а затем передает заголовки на сервер приложений. Spring Security на сервере приложений будет читать заголовки и извлекать роли из нашей базы данных приложений, а затем создавать объект профиля пользователя. Теперь здесь я хочу продолжить поток и отобразить страницу angular, но я пытаюсь выяснить, как мне отправить объект профиля пользователя в angular, потому что angular в этот момент не выполняет вызов POST. Кроме того, как мне получить http-auth-interceptor в игре, потому что мне нужно продолжать проверять, аутентифицирован ли пользователь по-прежнему при изменении каждого представления/состояния в Angular.

Помощь приветствуется! Спасибо !


person PavanSandeep    schedule 17.12.2014    source источник
comment
Пожалуйста, обновите ссылку.   -  person Donald Duck    schedule 21.01.2017
comment
@DonaldDuck: готово   -  person PavanSandeep    schedule 01.02.2017


Ответы (2)


Вы можете реализовать крошечную службу JSON REST «/your-app/profile», которая защищена SiteMinder, считывает и оценивает заголовки и возвращает результат в виде объекта JSON.

Ваше приложение Angular (например, /your-app/index.html) также должно быть лучше защищено SiteMinder, чтобы вы получали немедленное перенаправление на логин SSO при доступе к нему без сеанса. Кроме того, при загрузке он должен считывать ресурс JSON REST «/your-app/profile». Он также должен ожидать, что SMSESSION отсутствует при чтении «/your-app/profile», и реагировать соответствующим образом — выполнить перезагрузку защищенной страницы index.html, чтобы вызвать повторный вход в систему SM SSO (если «/your-app/index. html" защищен, в противном случае вы должны инициировать вход в систему путем перенаправления на какой-либо защищенный ресурс).

Если вы хотите постоянно проверять, присутствует ли сеанс SiteMinder, вы можете либо получить доступ к «/your-app/profile», либо проверить наличие файла cookie SMSESSION (только в том случае, если он не настроен только как HTTP) .

Одно ПРИМЕЧАНИЕ ПО БЕЗОПАСНОСТИ: Если вы полагаетесь на бесшовную систему единого входа, которая предоставляется с помощью файла cookie SMSESSION, помните о возможных атаках CSRF (подделка межсайтовых запросов)!

person Vilmantas Baranauskas    schedule 22.12.2014
comment
Но я тоже буду создавать сеанс Spring, верно? У меня есть SMSESSION и JSESSION? - person PavanSandeep; 23.12.2015
comment
При необходимости вы можете создать HttpSession (JSESSION), но это не обязательно и не привязывается автоматически к SMSESSION. При создании HttpSession вы должны проверять при каждом запросе, не изменился ли SMSESSION - иначе вы можете иметь серьезную уязвимость. Имейте в виду, что полагаться на сеансы в службах REST — это признак плохой архитектуры. - person Vilmantas Baranauskas; 25.12.2015
comment
@VilmantasBaranauskas У меня похожая ситуация, как и у вас, мы используем SiteMinder, angular и cordova для вызова Rest API позади SiteMinder. Но мы столкнулись с возвратом пользовательского интерфейса входа в систему. Мой вопрос в том, как реализовать это для вызова API? - person JimiOr2; 03.06.2016
comment
@VilmantasBaranauskas — я использую SSO (Siteminder) для приложения AngularJS + Spring Boot + Spring Security. Моя проблема в том, что через некоторое время я получаю SMSESSION=LOGGEDOFF. Как инициировать повторный вход в SM SSO? Спасибо. - person Amit G.; 28.06.2018
comment
@AmitG., как уже упоминалось в ответе, перезагрузка страницы будет правильным вариантом, если ваш AngularJS защищен SiteMinder: stackoverflow.com/questions/3715047/ - person Vilmantas Baranauskas; 01.07.2018

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

Интеграция Spring Security с SiteMinder

person Yuri Gridin    schedule 05.08.2020