Есть ли хороший пример SimpleSAMLphp SLO? - PullRequest
10 голосов
/ 23 сентября 2011

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

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

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

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

Я могу убедить нашу платформу перенаправить пользователя на произвольную страницу при выходе из системы, поэтому я думаю, что первая часть может быть достигнута страницей, которая использует 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?

1 Ответ

3 голосов
/ 05 ноября 2011

SLO Issue

Представьте себе такую ​​схему:

Платформа - SP1 ----- IdP ----- SP2 ----- Приложение

Платформа и приложения связаны с 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 Issue

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

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

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

...