Перенос логина между приложениями — Spring Security Core

У нас есть приложение, разработанное в Grails 2.3.11 с использованием Spring Security Core 2.0 в качестве плагина аутентификации.

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

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

Является ли это возможным? Какой метод мы должны использовать?

  • JSON-аутентификация
  • Печенье «Помни меня»
  • Сервер CAS с использованием подключаемого модуля CAS Spring Security

Спасибо.


person Adolfo Barroso    schedule 13.07.2015    source источник
comment
У меня есть предложение, которое может избежать процесса реализации двух логинов. Создайте группы ролей пользователей на основе проектов (группа проекта A, группа проекта B). Создайте панель инструментов, которая отображается после входа в систему. На этой панели должны отображаться все проекты, связанные со всеми теми ролевыми группами, членом которых является пользователь. Вы можете реализовать это, используя только Spring Security.   -  person Ejaz Ahmed    schedule 13.07.2015
comment
Когда вы говорите each application represents a different industrial project, что это за приложения? Являются ли они одним веб-приложением, работающим в одном домене (www.example.com), одним приложением, обслуживающим несколько доменов в одном домене верхнего уровня (client.example.com, client2.example.com и т. д.), одним приложением, обслуживающим несколько доменов верхнего уровня (www.foo.com, www.bar.com). и т. д.) или несколько приложений, обслуживающих несколько доменов? Решение зависит от вашего сценария.   -  person manish    schedule 13.07.2015
comment
@manish каждый веб-сайт перед входом в систему является эксклюзивным для клиента. Например, Клиент-1 будет иметь страницу предварительного входа с 1...n возможными проектами. Я думаю, что мы будем представлять домены так: project1.client.com, project2.client.com, projectn.client.com.   -  person Adolfo Barroso    schedule 13.07.2015
comment
@EjazAhmed, но веб-приложение перед входом в систему должно быть независимым приложением. Нам нужно передать логин или сеанс в веб-приложение проекта.   -  person Adolfo Barroso    schedule 13.07.2015


Ответы (1)


Вы можете реализовать предварительный вход с помощью внешнего прокси-сервера, такого как сервер. Этот прокси «пересылает» логин с каждым запросом на сервер приложений в заголовке http. Затем вы можете использовать фильтр предварительной авторизации spring-security.

См. изображение (рис. 1) этой статьи для иллюстрации. (Tam/ Junction — такой прокси)

person Ralph    schedule 13.07.2015
comment
Я вижу проблему в этой реализации предварительного входа в систему (поправьте меня, если я ошибаюсь). Согласно сценарию предварительной аутентификации, обратите внимание, что при использовании такой системы фреймворк вообще не выполняет проверки аутентификации, и чрезвычайно важно, чтобы внешняя система была правильно настроена и защищала любой доступ к приложению. Если злоумышленник сможет подделать заголовки в своем исходном запросе без обнаружения, то он потенциально может выбрать любое имя пользователя, которое пожелает. ¿Как я могу себе это позволить? - person Adolfo Barroso; 21.07.2015
comment
@ Адольфо Баррозу: да, ты прав. Важно, что обойти прокси невозможно! (во всяком случае, такие системы существуют в реальном мире). Я также видел некоторые системы, в которых прокси-сервер генерирует какой-то токен и добавляет его в заголовок переадресованного запроса, чтобы убедиться, что запрос фильтруется прокси-сервером. - person Ralph; 21.07.2015