Единый выход

Обновлено: 19 июня 2015 г.

Область применения: Azure

Microsoft Azure Active Directory контроль доступа (также известный как служба контроль доступа или ACS) теперь включает дополнительную возможность единого входа в дополнение к единому входу. Результатом является полный и согласованный вход и выход для пользователей веб-приложений, интегрированных с ACS.

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

В этом разделе объясняется, как работает единый выход и как реализовать единый выход для приложения проверяющей стороны. Обязательно просмотрите пример кода для реализации федеративного единого выхода в приложении ASP.NET MVC 4 в примере кода: ASP.NET MVC 4 с федеративным выходомt.

Требования к системе

Чтобы реализовать единый выход, требуются следующие инструменты и службы.

  • Подписка Azure.

  • Visual Studio 2012

Сведения о едином выходе

В каждом сеансе браузера пользователь может выбрать поставщик федеративных удостоверений для входа в приложение проверяющей стороны. С помощью единого выхода, когда пользователь выходит из поставщика удостоверений или приложения проверяющей стороны, пользователь будет автоматически выходить из всех приложений проверяющей стороны, куда он вошел с помощью того же поставщика удостоверений.

Например, клиент использует учетную запись Майкрософт (Windows Live ID) для входа в три интегрированных с ACS приложения проверяющей стороны. При выходе клиента из любого приложения он будет автоматически выходить из своей учетной записи Майкрософт и из двух других приложений.

Полная поддержка единого выхода доступна для настраиваемых поставщиков удостоверений WS-Federation и ADFS. Поддержка ограниченного единого выхода доступна для учетной записи Facebook, Google, Майкрософт и Yahoo! поставщики удостоверений. Эти поставщики удостоверений не могут инициировать единый выход. Однако, когда приложение проверяющей стороны инициирует единый выход, клиент выходит из этих поставщиков удостоверений и связанных приложений проверяющей стороны, в которые они вошли с помощью этого поставщика удостоверений.

Как работает единый выход

Единый выход может инициировать поставщик удостоверений или приложение проверяющей стороны. В этом разделе мы обсудим каждый из этих процессов выхода и объясним, как можно включить единый выход для приложения проверяющей стороны.

Приложение проверяющей стороны инициирует выход

Для запуска единого выхода, когда пользователь выходит из приложения проверяющей стороны, отправьте URL-адрес со следующими параметрами конечной точке ACS WS-Federation.

  • wa: задано значение wsignout1.0

  • wreply: задайте значение URL-адрес страницы выхода, то есть страницу, на которой пользователь перенаправляется после завершения выхода. Это значение должно быть частью доменного имени RP, например "https://RP.com/"

  • wtrealm: задайте значение свойства Realm приложения проверяющей стороны на портале управления ACS.

Ниже приведен пример URL-адреса для единого выхода.

https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=<YourAppRealm>&wreply=<YourAppRealmLogoutPage>

Вот несколько примеров.

https://Fabrikam.accesscontrol.windows.net/v2/wsfederation?wa=wsignout1.0&wtrealm=" https://www.fabrikam.com/" &wreply= https://www.fabrikam.com/logout

Пример кода, реализующего единый выход, инициированный проверяющей стороной, см. в примере кода: ASP.NET MVC 4 с федеративными выходами. Этот пример содержит код в файле LogoutController.cs, который получает значения wreply и wrealm и создает экземпляр класса SignOutRequestMessage.

Когда ACS получает URL-адрес выхода, ACS завершает сеанс клиента с поставщиком удостоверений, отправив запрос wsignout1.0 . Затем ACS отправляет сообщения wsignoutcleanup1.0 другим приложениям проверяющей стороны, на которые пользователь выполнил вход с помощью поставщика удостоверений.

Поставщик удостоверений инициирует выход

Поддержка единого выхода со стороны поставщика удостоверений доступна для настраиваемых поставщиков удостоверений WS-Federation и ADFS. Она не поддерживается для поставщиков удостоверений Майкрософт (Windows Live ID), Google, Yahoo! и Facebook, так как они не уведомляют ACS и приложения проверяющей стороны о выходе пользователя.

Когда пользователь выходит из WS-Federation или поставщика удостоверений ADFS, поставщик удостоверений отправляет ACS выходу из системы wsignoutcleanup1.0 сообщение запроса очистки с указанным ниже форматом: https://<YourNamespace>.accesscontrol.windows.net/v2/wsfederation?wa=wsignoutcleanup1.0

Когда ACS получает сообщение wsignoutcleanup1.0, оно проверяет, получен ли запрос из той же конечной точки, что и запрос на вход, проверяя ссылку в заголовке HTTP сообщения: <Referrer>: https://CustomIDP где значение ссылки> является значением <ссылки в URL-адресе входа в файле cookie ACSSignOut.

Затем ACS отправляет сообщение wsignoutcleanup1.0 всем приложениям проверяющей стороны в сеансе клиентского браузера текущего пользователя, связанном с поставщиком удостоверений. Этот процесс похож на процесс, описанный в разделе "Приложение проверяющей инициирует выход". Поставщик удостоверений может перенаправить браузер на страницу выхода, которой он управляет, чтобы завершить процесс выхода.

Процесс единого выходы

В данном разделе рассматривается каждая из перечисленных выше задач в едином процессе выхода. Поскольку ACS обрабатывает все детали, вам не нужно изучать этот процесс. Тем не менее, это может быть полезно при настройке и отладке.

Пошаговый единый выход

  1. Когда ACS получает запрос signout1.0 по своей конечной точке WS-Federation, ACS ищет поставщика удостоверений инициатора запроса выхода в файле cookie ACSSignOut.

    ACS использует следующие правила сопоставления для идентификации поставщика удостоверений.

    • Если параметр wtrealm указан в запросе на выход, СЛУЖБА ACS выполняет поиск значения wtrealm в списке проверяющих сторон для каждого поставщика удостоверений.

    • Если wtrealm не указан и в файле cookie ACSSignOut есть только одна запись поставщика удостоверений, ACS использует поставщик удостоверений в файле cookie ACSSignOut.

    • В противном случае служба ACS отображает страницу ошибки, указывающую на сбой попытки выхода из-за отсутствия параметра wtrealm .

  2. ACS отправляет сообщение signout1.0 поставщику удостоверений, представляя страницу с встроенным элементом фрейма (<iframe>). ACS также добавляет <элементы iframe> , содержащие сообщение SignOutCleanup1.0 , на страницы всех активных WS-Federation проверяющих сторон, отличных от инициатора, и ACS удаляет проверяющие стороны из файла cookie ACSSignOut .

  3. Страница, отображающая состояние выхода проверяющей стороны, также содержит JavaScript, который выполняется в течение определенного времени и затем перенаправляет браузер. Если параметр wreply был указан в файле cookie ACSSignOut, код JavaScript перенаправляется на адрес, указанный значением wreply для завершения выхода. В противном случае JavaScript перенаправляется по URL-адресу возврата проверяющей стороны, как указано на портале управления ACS.

ACS использует файл cookie сеанса с именем ACSSignOut для записи поставщика удостоверений, прошедшего проверку подлинности пользователя в приложении. Можно просмотреть файл cookie в трассировке сеанса. Файл cookie сеанса имеет следующий формат имени: ACSSignOut.<YourACSNamespace>

Файл cookie ACSSignOut определяет приложение проверяющей стороны и поставщик удостоверений, прошедший проверку подлинности пользователя. ACS использует файл cookie в процессе единого выхода для гарантии того, что выход выполнен из нужного поставщика удостоверений и того, что пользователь вышел из других приложений проверяющей стороны, куда вошел с помощью поставщика удостоверений.

Ограничения единого выхода

При использовании единого выхода имейте в виду следующие ограничения.

  • Только настраиваемые поставщики удостоверений WS-Federation и поставщики удостоверений ADFS могут инициировать единый выход. Поставщики удостоверений социальных сетей, такие как Yahoo, Google, учетная запись Майкрософт (Windows Live ID) и Facebook, не уведомляют ACS или приложение проверяющей стороны, когда клиент выходит из веб-сайта поставщика удостоверений. Таким образом, пользователи приложения проверяющей стороны, использующего этот поставщик удостоверений, не будут автоматически выходить, если выход происходит на сайте поставщика удостоверений.

  • Единый выход может действовать не во всех средах. Когда ACS получает одно сообщение о выходе из приложения проверяющей стороны, оно отправляет запрос wsignout1.0 поставщику удостоверений и сообщению wsignoutcleanup1.0 каждому из других приложений проверяющей стороны. Когда ACS получает сообщение запроса wsignoutcleanup1.0 от поставщика идентификации, оно отправляет сообщение wsignoutcleanup1.0 каждому из приложений проверяющей стороны. При этом ACS не может гарантировать, что поставщик удостоверений или приложения проверяющей стороны будут надлежащим образом на них реагировать, выполняя выход пользователь.

  • Когда пользователи выходят из поставщика удостоверений Google в Internet Explorer, браузер выводит сообщение "Отображается только безопасное содержимое". Для завершения выхода пользователи должны щелкнуть "Показать все содержимое". После завершения выхода браузер перенаправляется по URL-адресу, указанному значением параметра wreply .

    Internet Explorer 9 и более поздние версии Internet Explorer отображают уведомление о защищенном содержимом, встречая незащищенное содержимое на защищенной странице, например изображения или сценарии от незащищенного сервера. В этом случае, он реагирует на защищенное содержимое ACS (HTTPS/SSL) и незащищенное содержимое (HTTP) от поставщика удостоверений. В ACS это поведение нельзя изменить или отключить.

    Пользователи могут отключить уведомление, как описано в уведомлении "Отображается только безопасное содержимое" в Internet Explorer 9 или более поздней версии. Поскольку этот параметр применяется ко всем веб-сайтам и может сделать компьютер уязвимым пользователя для вредоносного контента, рекомендуется использовать значение по умолчанию, которое блокирует незащищенное содержимое (HTTP).

Чтобы помочь конечным пользователям инициировать единый выход, страниц выхода из приложения проверяющей стороны должна оповестить пользователей о необходимости закрыть браузер или явно выйти из других приложений проверяющей стороны и с веб-сайта поставщика удостоверений. Закрыть вкладку браузера, окно или страница недостаточно. Если компьютер используется совместно или находится в общедоступном месте, например в интернет-кафе, пользователи должны очистить журнал браузера перед закрытием.

См. также:

Основные понятия

Пример кода: ASP.NET MVC 4 с федеративной выходом

Другие ресурсы

Пассивная проверка подлинности для ASP.NET в WIF