Часть нашего сайта, скажем https://www.example.com/files, защищен модулем mod_auth_mellon, который предоставляет SP, который аутентифицируется с нашим IdP. Это прекрасно работает.
Остальная часть сайта - это Drupal с модулем samplesamlphp_auth. Этот модуль создает другой SP, который аутентифицируется с тем же IdP. Это тоже отлично работает.
Проблема в том, что эти два SP не используют общий логин. Вы должны входить в систему отдельно для каждого из них, даже если пользователь аутентифицируется с одним и тем же IdP. Очевидно, это нежелательно. Когда я вхожу в один, я хочу, чтобы другой обнаружил и использовал данные сеанса SAML для входа и меня.
Разве этого можно ожидать? Я думал, что два разных SP на одном хосте будут автоматически обмениваться информацией о сеансе, но теперь я думаю, что это не так. Каждый SP хранит информацию о сеансе в файлах cookie в пользовательском агенте. Файлы cookie имеют разные имена, но, что более важно, они относятся к сеансам из разных SP. Так что ими нельзя делиться.
Эта ветка есть некоторое обсуждение проблемы. Исходя из этого, я думаю, что необходимо, чтобы IdP распознал информацию о состоянии, сохраненную в пользовательском агенте, и не просил пользователя снова войти в систему. Это правильно? Как я могу сформулировать эту проблему для администраторов IdP?
Поскольку система единого входа обычно является частью настройки SAML, я бы посоветовал проверить IdP. Задача IdP - проверить, выполнил ли клиент уже вход в систему, и сообщить о том же сеансе другому SP.
Возможно, вам будет полезно узнать, с каким IdP и каким профилем SAML вы имеете дело, мой опыт ограничен профилем WebSSO и Shibboleth в качестве IdP и SP.
Хорошо, я постараюсь немного подробнее рассказать о профиле WebSSO:
Найдите документы Shibboleth, посвященные этому Вот.