Shibboleth SP передает неверное имя пользователя приложению - PullRequest
1 голос
/ 20 мая 2011

У меня есть приложение 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 минут?). Я точно не знаю, сколько именно это займет времени.

Что мне не хватает? Какие еще пути я должен преследовать?

1 Ответ

1 голос
/ 21 мая 2011

Ключ в том, что наше приложение представляет собой приложение Rails, развернутое с помощью Passenger.Похоже, что Passenger не обновлял переменные среды после первого вызова, поэтому вы можете получить старые данные.

Переключение на передачу пользовательской информации через заголовки (ShibUseHeaders on) решило проблему.

...