Центральный вход в систему с помощью SAML и создание сайта для работы в качестве поставщика удостоверений личности
Итак, мой сценарий выглядит так:
У меня есть два сайта a.com и сайт b.com и один сервер аутентификации cauth.com.
Чего хочет клиент, так это...
Когда пользователь приземляется на a.com или b.com пользователь заполняет форму входа на соответствующем сайте, но действие формы будет cauth.com (cauth.com/authenticate). когда пользователь проходит аутентификацию на cauth, он регистрируется на обоих сайтах.
Я думаю внедрить SAML для достижения того же и поток похож на iDP после аутентификации(cauth.com ) отправит ответ SAML как поставщикам услуг, так и пользователю, которому будет предоставлен доступ к обоим сайтам.
Я новичок в SAML и не могу получить надлежащую документацию и понимание для того же самого.
Что я хочу знать, так это:
- Стоит ли реализовывать мое решение проблемы?
- Можно ли сделать сайт (cauth.com ) в качестве поставщика удостоверений личности.Я посмотрел на поток , создающий ваш PHP-сайт в поставщика удостоверений SAML, но не смог получить правильное решение.
6 answers
SimpleSAMLphp должен быть довольно простым в настройке. Вы захотите сделать копию папки modules/exampleauth/
, а затем изменить файл modules/<yournewmodule>/lib/Auth/Source/External.php
, чтобы он работал для вашего сайта. Документация, тем не менее, хорошая, и это определенно самая простая вещь для ваших нужд и правильная.
Я должен добавить, что следование инструкциям по настройке SimpleSAMLphp должно дать вам базовое представление о том, какие файлы метаданных наиболее важны, где они находятся и как все взаимодействует.
Я не уверен, какую технологию вы используете для своего приложения. Если вы можете свободно переключиться на JAVA, я могу предложить вам Spring-Saml, потому что его очень легко реализовать и выполнить ваши требования. Spring-Saml имеет хорошую документацию и онлайн-поддержку, а также является проектом с открытым исходным кодом. Вы можете сослаться на эту ссылку для Spring-saml, а для репозитория кода используйте эту ссылку
Вы можете интегрировать spring-saml в свой abc.com и xyz.com приложение, чтобы сделать это Поставщик услуг (SP), и вы также можете развернуть его в другом домене. Затем вам необходимо иметь один IDP (сервер поставщика удостоверений личности) для вашего SPs. Таким образом, вы можете использовать ADFS с Active directory или LDAP в качестве IDP.
У нас было аналогичное требование к нашему клиенту. Недавно я интегрировал spring-saml в свой проект.
Пожалуйста, дайте мне знать о любой помощи
Механизм единого входа в систему (SSO), такой как SAML или OpenID Connect, даст вам то, что вы хотите.
Это связано с важным отличием, что форма входа не будет представлена на a.com
или b.com
, но эти сайты скорее перенаправят на cauth.com
, и пользователь будет проходить аутентификацию там. cauth.com
затем отправит проверяемое "утверждение" a.com
и b.com
о том, что пользователь успешно прошел проверку подлинности. Это составляет одну из основных целей федеративного единого входа, а именно то, что учетные данные пользователя не должны предоставляться/храниться на иностранных веб-сайтах и делают средства аутентификации независимыми от целевых веб-сайтов ("Полагающиеся стороны").
Итак, что вам следует искать, так это подходящую реализацию SAML или OpenID Connect для вашей платформы (не пишите ее самостоятельно!) и используйте это.
Shibboleth является открытым исходным кодом и одним из самых популярных решений единого входа. Он включает в себя Поставщик удостоверений SAML, который вы можете скачать здесь: https://shibboleth.net/downloads/identity-provider/latest/ .
Если ваш клиент готов, одним из подходов было бы использование облачного поставщика единого входа, такого как Okta, который имеет программу разработчика и может упростить задачу.
Я думаю, что в вашем описании есть тонкое недоразумение. Для аутентификации SAML, если пользователь на сайте a.com либо нажимает ссылку/кнопку для входа в систему, либо пытается получить доступ к защищенной странице, этот пользователь получит перенаправление http 305 на cauth.com . Там пользователь введет свои учетные данные, и пользователь будет перенаправлен обратно на a.com . Если этот пользователь затем перейдет на сайт b.com и пытается получить доступ к защищенному контенту, b.com отправляет пользователя на cauth.com с тем же перенаправлением http 305. На этот раз, так как есть активный сеанс для браузера пользователя по адресу cauth.com , пользователь НЕ видит форму учетных данных. Вместо этого IDP возвращает пользователя с успешной аутентификацией в b.com . Пользователю кажется, что они автоматически вошли на сайт b, но на самом деле произошел поток аутентификации SAML.
Ответ Ганса Z исключает тот факт, что IDP отправляет утверждения только по запросу a или b (Проверяющие стороны или RP, также известные как Поставщики услуг или SPs). Это не трансляция для всех RPS.
Я подчеркну, что SAML НЕ поддерживает a.com получение учетных данных от пользователя и последующая передача их в механизм аутентификации. Это шаблон, с которым можно ознакомиться по LDAP.
Взгляните на диаграмму последовательности в статье википедии о SAML.
Следуйте приведенной ниже инструкции, чтобы получить имплиментацию SAML с PHP.
- Настройка входа в SAML очень проста в php.
- Сначала зарегистрируйтесь на сервере onelogin https://www.onelogin.com/signup и создайте на нем демонстрационное приложение. После этого следуйте всем инструкциям, чтобы установить Idp (настройка поставщика удостоверений) и sp (настройка поставщика услуг) в settings.php https://developers.onelogin.com/saml/php
Это идеально сработало для меня с CI и и php