У меня есть приложение Rails, которое я Shibbolized с помощью Shibboleth SP (последняя версия - 2.4.2). Я использую его с Apache 2.2. Мой IdP - это сервер MS AD FS 2.0.
Кажется, все работает хорошо - пользователи попадают на сайт, перенаправляются в AD FS, проходят проверку подлинности, а затем возвращаются и входят на сайт.
Проблема в том, что, как только вы это сделаете, практически невозможно своевременно войти в систему как другой пользователь. Вы можете очистить все свои куки (я пытаюсь сделать это с Safari и Chrome на Mac) и перезапустить браузер, но если я сначала аутентифицируюсь как Алиса, а затем пытаюсь войти в систему как Кэрол, я все равно войду в приложение как Алиса.
Ответ SAML, полученный shibd после очистки файлов cookie, содержит правильную идентификационную информацию:
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/claims/CommonName">
<AttributeValue>Carol</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
<AttributeValue>carol@dev.REDACTED.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn">
<AttributeValue>carol@dev.REDACTED.com</AttributeValue>
</Attribute>
</AttributeStatement>
Но когда Shibboleth SP передает переменные среды моему приложению, вместо этого он отправляет неверные учетные данные:
[DEBUG 05/19 16:30:09] ENV: Shib-Session-ID => _615014991ed1b7dcc43f647ceb1f4944
[DEBUG 05/19 16:30:09] ENV: Shib-Identity-Provider => http://REDACTED/adfs/services/trust
[DEBUG 05/19 16:30:09] ENV: Shib-Authentication-Instant => 2011-05-19T21:17:23.861Z
[DEBUG 05/19 16:30:09] ENV: Shib-Authentication-Method => urn:federation:authentication:windows
[DEBUG 05/19 16:30:09] ENV: Shib-AuthnContext-Class => urn:federation:authentication:windows
[DEBUG 05/19 16:30:09] ENV: Shib-Session-Index => _cadfb4e6-ffb2-45f9-aab5-6bce8c3bc17a
[DEBUG 05/19 16:30:09] ENV: cn => alice
[DEBUG 05/19 16:30:09] ENV: email => alice@dev.REDACTED.com
[DEBUG 05/19 16:30:09] ENV: principal => alice@dev.READACTED.com
Несмотря на то, что все куки-файлы были уничтожены, Shib-Session-ID будет одинаковым. Каким-то образом кажется, что он связывает два взаимодействия и восстанавливает существующий сеанс, а не создает новый сеанс с информацией об учетной записи из ответа SAML.
Я установил все значения тайм-аута кеша, которые я могу найти, равными 60 секундам, но ожидания 2-3 минут при закрытом браузере недостаточно, чтобы заставить его начать новый сеанс.
<StorageService type="Memory" id="mem" cleanupInterval="60"/>
<SessionCache type="StorageService" StorageService="mem" cacheTimeout="60"
inprocTimeout="60" cleanupInterval="60" />
...
<Sessions lifetime="60" timeout="60" checkAddress="false" relayState="ss:mem"
handlerSSL="false">
Работает перезапуск apache и shibd, как и закрытие браузера и долгое время на нем (10-15 минут?). Я точно не знаю, сколько именно это займет времени.
Что мне не хватает? Какие еще пути я должен преследовать?