Единый выход с ADFS и STS

В настоящее время у нас есть проблемы с единым входом с ADFS 2.0 и внешним IP-STS. Наша настройка такова: RP1 ‹-- trust --> ADFS 2.0 ‹-- trust --> Custom IP-STS RP2 ‹-- trust --> ADFS 2.0 ‹-- trust --> Custom IP-STS

Часть единого входа работает очень хорошо: если пользователи уже вошли в систему с использованием пользовательского IP-STS для доступа к RP1, после этого они могут получить доступ к RP2 в том же сеансе браузера без необходимости повторного входа в систему.

Однако проблема возникает в процессе выхода. Когда пользователи выходят из RP1, с помощью Fiddler мы видим, что:

  1. Запрос на выход (wsignout1.0) отправляется в ADFS.
  2. ADFS передает запрос на выход пользовательскому IP-STS
  3. Настраиваемая IP-STS правильно обрабатывает действие выхода, а затем возвращает обратно в ADFS.
  4. ADFS возвращается обратно (вышел из системы) RP1
  5. RP1 больше не аутентифицируется, поэтому, конечно, предлагается снова войти в систему (ПРАВИЛЬНО)
  6. ВОТ ПРОБЛЕМА: RP2 все еще может работать без каких-либо проблем (с предыдущим набором требований). И ADFS не отправляет никакого действия wsignoutcleanup1.0 на RP2.

Я предполагаю, что ADFS должен выполнять выход для всех RP, имеющих один и тот же сеанс, но это не так. Я ошибся? Или я упустил какую-то конфигурацию?

Конечно, у нас есть возможность явно отправить действие wsignoutcleanup1.0 на RP из пользовательского IP-STS, но нам нужно проанализировать «wctx», чтобы получить исходный URL-адрес RP, чего я не хочу. Я также попытался отправить действие wsignoutcleanup1.0 обратно в ADFS из пользовательского IP-STS (шаг 3), но это также не помогло.


person Duy Pham    schedule 19.06.2013    source источник


Ответы (2)


Я предполагаю, что вы возвращаете не iframe с помощью wsignoutcleanup, а скорее изображения. Таким образом, adfs не возвращает вложенные фреймы iframe, другими словами, он не выполняет эскалацию выхода должным образом.

Правильная последовательность это

1 приложение отправляет запрос на выход в adfs

2 adfs эскалирует запрос на внешний sts

3 sts возвращает последовательность фреймов, указывающих на аутентифицированные приложения (в данном случае adfs) с wsignoutcleanup

4 adfs возвращает вложенный iframe с wsignoutcleanup для всех аутентифицированных приложений, включая rp1 и rp2.

person Wiktor Zychla    schedule 19.06.2013
comment
Я не использую изображения, предложенные в вашем образце в blogspot. Моя пользовательская STS просто перенаправляет обратно в ADFS (https://‹domain›/adfs/ls/?requestContextId=....) при выходе из системы, потому что это код из шаблона веб-службы WCF STS FederatedPassiveSecurityTokenServiceOperations.ProcessSignOutRequest(requestMessage, User, requestMessage.Reply, Response);. Может ли это быть проблемой? - person Duy Pham; 20.06.2013
comment
Да, это проблема. Следуйте моему руководству, но визуализируйте iframe вместо imgs. netpl.blogspot.com/2010/ 12/ - person Wiktor Zychla; 20.06.2013
comment
Теперь он работает после остановки передачи requestMessage.Reply в ProcessSignOutRequest и рендеринга iframe в ADFS с действием wsignoutcleanup. - person Duy Pham; 20.06.2013
comment
Еще один вопрос: почему это не сработало, когда я явно добавил действие wsignoutcleanup в requestMessage.Reply перед передачей его в ProcessSignOutRequest? - person Duy Pham; 20.06.2013
comment
Трудно сказать без трассировки отладки http. Используйте Fiddler или HttpFox для прослушивания всех запросов и ответов и сравнения допустимой последовательности с недопустимой. - person Wiktor Zychla; 20.06.2013
comment
Я обнаружил, что ADFS на самом деле перенаправляет обратно на RP (откуда поступает запрос на выход), и, следовательно, такая же проблема перенаправления, как и выше. - person Duy Pham; 21.06.2013
comment
Я поиграл с этими SSO на основе вашего образца. Это действительно помогает мне, и пока все работает нормально. Большое спасибо за Вашу помощь. - person Duy Pham; 27.06.2013

Похоже, что пользовательская STS не отправляет signoutcleanup в ADFS.

person Brock Allen    schedule 19.06.2013
comment
Собственно, я так и сделал, пытаясь найти решение. Но, как было сказано выше, это не помогло. Процесс выхода по-прежнему останавливается в ADFS. - person Duy Pham; 20.06.2013