Комментарии 11
Реализовывал SSO, используя SAML 2, на C# для нашего портала. Подробной документации действительно мало.
Мы сейчас нечто подобное делаем.
Прикручивал в приложение на RoR, все заняло минут 20-30, дольше Azure настраивал.
что надо поле SSLImplementation заменить на sslImplementationName. Без этого не подцепляет SSL.
Жизнь заставила разбираться с SAML, причем одновременно java и asp.net. Я просмотрел исходники, фактически после получения подтверждения из idp к нему больше никаких обращений не происходит? Если пользователь разлогинится на idp, то фильтр по прежнему будет считать что он залогинен (см. isSAMLSessionValid).
В примере из статьи действительно не реализован случай, когда процедура логаута инициируется на стороне idp. Shibboleth не поддерживает это из коробки. Однако есть ответвление от основной ветки shibboleth’а (https://wiki.niif.hu/ShibIdpSLO), где такая функциональность реализована. Во время написания статьи это работало. Насколько это сейчас актуально и поддерживается мы не знаем. А работает эта функциональность очень просто: в метаданных sp указывается поддержка logout’у (URL, метод, параметры). При логауте на idp берется SSO сессия и для каждого sp вызывается локальный логаут. Собственно он и реализован в Шаге 3 «Если получен запрос на logout, удаляем локальную сессию».
Кстати рекомендуем вам рассмотреть вариантами готовой интеграции sp и idp. Например, средствами спринга http://projects.spring.io/spring-security-saml/.
В качестве idp рекомендуем обратить внимание на KeyCloak. Мы писали в рамках темы безопасности об этом продукте https://habrahabr.ru/company/eastbanctech/blog/272149/.
Спасибо за развернутый ответ.
Проблема логаута осложняется еще и тем, что asp.net по-умолчанию создает шифрованные и подписанные куки, которые содержат всю информацию об авторизации, их просто так не отозвать в принципе, но тут еще можно побороться. На asp я использую kentor/authservices библиотеку и реализацию idp initiated logout там видел, опять же это требует хранения сессий в базе данных на стороне sp.
KeyCloak я обязательно посмотрю, меня интересует возможность хранения юзеров в базе данных (а не в LDAP или где-то еще) будь то Shibboleth или KeyCloak. Для версии Shibboleth 2.0 такая возможность реализовывалась довольно прозрачно, с третьей версией с ходу не получилось разобраться.
Делимся опытом по интеграции SSO средствами SAML 2.0