单一登录

更新时间:2015 年 6 月 19 日

适用于:Azure

Microsoft Azure Active Directory 访问控制 (也称为访问控制服务或 ACS) 现在包括可选的单一注销功能,用于补充单一登录。 结果是与 ACS 集成的基于 Web 的应用程序的用户的完整、一致的登录和注销体验。

当最终用户从支持单一登录的信赖方应用程序中注销时,ACS 可以自动将该用户从标识提供程序站点以及使用该标识提供程序登录到的所有其他应用程序中注销。 同样,如果客户从标识提供程序网站中注销,则 ACS 可以自动将该客户从使用该标识提供程序登录到的应用程序中注销。

本主题说明单一注销的工作方式,以及如何为信赖方应用程序实现单一注销。 请务必查看示例代码,以便在代码示例中的 ASP.NET MVC 4 应用程序中实现联合单一注销:使用联合注销 t ASP.NET MVC 4

系统要求

若要实现单一注销,需要以下工具和服务。

  • Azure 订阅

  • Visual Studio 2012

关于单一注销

在每个浏览器会话中,客户可以选择联合标识提供程序,以便登录到信赖方应用程序。 有了单一注销,当用户从标识提供程序或信赖方应用程序中注销时,客户就会自动从使用同一标识提供程序登录到的所有信赖方应用程序中注销。

例如,客户使用 Microsoft 帐户 (Windows Live ID) 登录到三个与 ACS 集成的信赖方应用程序。 当客户从其中任一应用程序中注销时,就会自动从其 Microsoft 帐户中注销,并从其他两个应用程序中注销。

完全单一注销支持适用于自定义 WS 联合身份验证和 ADFS 标识提供程序。 Facebook、Google、Microsoft 帐户和 Yahoo! 标识提供者。 这些标识提供者无法启动单一注销。但是,当信赖方应用程序启动单一注销时,客户会注销这些标识提供者,并使用该标识提供者登录到的关联信赖方应用程序。

单一注销的工作方式

单一注销可以由标识提供程序或信赖方应用程序启动。 在本节中,我们将查看上述每个注销过程,并说明如何为信赖方应用程序启用单一注销。

信赖方应用程序启动注销

若要在用户从信赖方应用程序中注销时启动单一注销,请向 ACS WS 联合身份验证终结点发送带以下参数的 URL。

  • wa:设置为 wsignout1.0

  • wreply:将值设置为 注销页面的 URL,即注销完成后用户重定向的页面。 此值应为 RP 域名的一部分,例如“https://RP.com/"

  • wtrealm:设置为 ACS 管理门户中信赖方应用程序的 Realm 属性的值。

以下是单一注销的示例 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 中的代码,该代码获取 wreplywrealm 值,并创建 SignOutRequestMessage 类的实例。

当 ACS 收到注销 URL 时,ACS 通过发送 wsignout1.0 请求结束与客户标识提供者的会话。 然后,ACS 使用标识提供者将 wsignoutcleanup1.0 消息发送到用户登录的其他信赖方应用程序。

标识提供程序启动注销

仅自定义 WS 联合身份验证和 ADFS 标识提供程序支持标识提供程序启动的注销。 Microsoft 帐户 (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其中引用器>的值是 ACSSignOut Cookie 中登录 URL 中引用者的值<。

然后,ACS 会将 wsignoutcleanup1.0 消息发送到与标识提供者关联的当前用户的客户端浏览器会话中的所有信赖方应用程序。 此过程类似于“信赖方应用程序启动注销”一节中所述的过程。 标识提供程序可以将浏览器重定向到它控制的注销页,以完成注销过程。

单一注销过程

本节介绍单一注销过程中的每一步骤。 由于 ACS 为你处理细节,因此你无需了解此过程。 但是,此过程可能对自定义或调试很有用。

单一注销分步说明

  1. 当 ACS 在其WS-Federation终结点收到 注销 1.0 请求时,ACS 会在 ACSSignOut Cookie 中查找注销请求发起程序的标识提供者。

    ACS 使用以下匹配规则来确定标识提供程序。

    • 如果在注销请求中指定 了 wtrealm 参数,ACS 将在每个标识提供者的信赖方列表中搜索 wtrealm 值。

    • 如果未指定 wtrealm ,并且 ACSSignOut Cookie 中只有一个标识提供者条目,则 ACS 使用 ACSSignOut Cookie 中的标识提供者。

    • 否则,ACS 会显示一个错误页,指示尝试注销失败,因为 缺少 wtrealm 参数。

  2. ACS 通过向标识提供者发送注销 1.0 消息,方法是向标识提供者显示内联帧 (<iframe>) 元素。 ACS 还将包含 SignOutCleanup1.0 消息的 iframe> 元素添加到<除发起方以外的所有活动WS-Federation信赖方的页面,ACS 将从 ACSSignOut Cookie 中删除信赖方。

  3. 显示信赖方注销状态的页还包含先运行指定的一段时间,然后对浏览器进行重定向的 JavaScript。 如果在 ACSSignOut Cookie 中指定了 wreply 参数,则 JavaScript 会重定向到 由 wreply 值指示的地址以完成注销。否则,JavaScript 会重定向到信赖方的返回 URL,如 ACS 管理门户中指定的。

ACS 使用名为 ACSSignOut 的会话 Cookie 来记录通过应用程序对用户进行了身份验证的标识提供程序。 你可以在会话跟踪中查看该 Cookie。 会话 Cookie 具有以下名称格式: ACSSignOut.<YourACSNamespace>

ACSSignOut Cookie 标识对用户进行身份验证的信赖方应用程序和标识提供者。 ACS 在单一注销过程中使用 Cookie 来确保注销正确的标识提供程序,并将用户从使用该标识提供程序登录的其他信赖方应用程序中注销。

单一注销的限制

在使用单一注销时,请注意以下限制。

  • 只有自定义WS-Federation标识提供者和 ADFS 标识提供者才能启动单一注销。当客户注销标识提供者网站时,社交标识提供者(如 Yahoo、Google、Microsoft 帐户 (Windows Live ID) 和 Facebook)不会通知 ACS 或信赖方应用程序。 因此,当标识提供程序网站发起注销时,使用这些标识提供程序的信赖方应用程序的用户不会自动注销。

  • 单一注销并非在所有环境中都有效。 当 ACS 从信赖方应用程序收到单一注销消息时,它会向标识提供者发送 wsignout1.0 请求,并向其他信赖方应用程序发送 wsignoutcleanup1.0 消息。 当 ACS 从标识提供程序收到 wsignoutcleanup1.0 请求消息时,它会向每个信赖方应用程序发送 wsignoutcleanup1.0 消息。 但是,ACS 无法保证标识提供程序或信赖方应用程序会通过注销用户来做出相应的响应。

  • 当用户使用 Internet Explorer 从 Google 标识提供程序中注销时,浏览器将显示“只显示安全内容”提示。 若要完成注销,用户必须单击“显示所有内容”。 注销完成后,浏览器会重定向到 由 wreply 参数的值指定的 URL。

    Internet Explorer 9 及更高版本的 Internet Explorer 在遇到安全页上有非安全内容(如源自非安全服务器的图像或脚本)时,将显示安全内容通知。 在这种情况下,它将对来自标识提供程序的安全 (HTTPS/SSL) ACS 内容和非安全 (HTTP) 内容做出反应。 ACS 无法更改或制止此行为。

    用户可以取消通知,如 Internet Explorer 9 或更高版本中的“仅显示安全内容”通知中所述。 但是,由于此设置将应用于所有网站,并可能使用户的计算机易受到恶意内容的攻击,因此建议使用阻止非安全 (HTTP) 内容的默认设置。

为帮助最终用户启动单一注销,信赖方应用程序的注销页应指示用户关闭浏览器或显式从其他信赖方应用程序和标识提供程序网站中注销。 关闭浏览器选项卡、窗口或页面是不够的。 如果计算机是共享的或公共场所的计算机(例如网亭计算机),则用户应在关闭浏览器之前清除浏览器历史记录。

另请参阅

概念

代码示例:使用联合注销 ASP.NET MVC 4

其他资源

使用 WIF 实现 ASP.NET 被动身份验证