Подтвердить что ты не робот

Есть ли хороший пример SimpleSAMLphp SLO?

Один из наших клиентов просит, чтобы мы реализовали Single Logout (SLO) через SAML. Их стороной службы SAML является поставщик удостоверений, в то время как наш поставщик услуг. Single-Signon (SSO) работает, проверяя учетные данные пользователя с клиентом IdP, а затем перенаправляя пользователя на страницу входа на другой платформе с маркером, который позволяет им войти в систему. Эта платформа абсолютно ничего не знает о SAML и в в частности, не разделяет состояние сеанса SimpleSAMLphp.

Выход из системы должен произойти двумя способами:

  • Если пользователь нажимает кнопку выхода на нашей платформе, необходимо вывести их на нашем сайте и нажать на службу IdP SLO.

  • Если пользователь нажимает кнопку выхода на стороне клиента или на другой стороне поставщика услуг, клиент IdP попадает в нашу службу SP SLO, которая затем должна вывести их из нашей реальной платформы, прежде чем перенаправить пользователя вернуться к странице ответа на выход из системы.

Я могу убедить нашу платформу перенаправить пользователя на произвольную страницу при выходе из системы, поэтому я думаю, что первая часть может быть достигнута на странице, использующей SimpleSAML_Auth_Simple::getLogoutURL().

Такая страница может также работать при ударе со стороны IdP, но спецификации SAML достаточно сложны, и я не могу быть уверен, пока не попробуем. Однако конфигурация SP в config/authsources.php не принимает параметр SingleLogoutService; метаданные, созданные в /www/module.php/saml/sp/metadata.php/entityid, по-прежнему отображают /www/module.php/saml/sp/saml2-logout.php/entityid как местоположение SingleLogoutService. Если эта страница необходима для очистки сеанса SimpleSAMLphp, это хорошо, но мне нужно знать, как проскальзывать дополнительные перенаправления, необходимые для входа пользователя из нашей платформы.

Я попытался найти примеры, но все, что я получаю, это ссылки API. Было бы также неплохо узнать, как я могу проверить выход из системы, не пытаясь настроить собственный IdP; существует ли такая служба, как openidp.feide.no, которая обрабатывает SLO, а также SSO?

4b9b3361

Ответ 1

Проблема SLO

Представьте эту схему:

Plattform - SP1 ----- IdP ----- SP2 ----- Приложение

Plattform и приложения связаны с simpleSAMLphp SP, который также формирует федерацию с IdP.

Вы должны найти обычную функцию выхода из Platffom, app1 и app2 и переписать ее:

normal_app_logout() {

 // code of the normal logout
 ....
 ....

 // new code

 require_once('<path-to-ssp>/simplesamlphp/lib/_autoload.php');   //load the _autoload.php
 $auth = new SimpleSAML_Auth_Simple('default-sp');  // or the auth source you using at your SP
 $auth->logout();   <--- call to the SLO 
}

Это закончится локальным сеансом, сеансом SP, подключенным к этому приложению, сеансом IdP и сеансами SP для SP, подключенных к IdP, но... что произойдет с сеансом других приложений? Они все равно будут активны. Вы подумали о активном вызове, чтобы закончить его, но я думаю, что лучше, если вы также переопределите функцию is_logged_in(), которую реализует множество приложений.

Вы должны переопределить эту функцию и вернуть только true, если существует также активный сеанс SP, используя функцию

$auth->isAuthenticated()

Недавно я реализовал эту функциональность в плагине Wordpess SAML, проверьте код

Проблема IdP

Используйте бесплатную пробную версию Onelogin, вы можете зарегистрировать свой SP там и использовать его IdP. Следуйте этому руководству для настройки ваших SAML-коннекторов

Но я думаю, что вам лучше попытаться построить IdP самостоятельно. Существует хорошая документация, и этапы легки. Используйте authsource "example-userpass", если вы не хотите тратить время на настройку базы данных /ldap.

Также вы можете установить фактический экземпляр simplesamlphp как SP и IdP, но я думаю, что если вы изучаете simplesamlphp, лучше не смешивать.