理解和调试 Web 身份验证代理工作流 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

你可以使用 Web 身份验证代理启用面向用户的单一登录 (SSO) 并在多个 Windows 应用商店应用中对单个服务进行无缝身份验证。Web 身份验证代理支持 OAuth 和 OpenID Internet 身份验证协议,因此你可以将你的应用与提供用户身份验证的 Web 服务集成。这使你可以在你的应用中使用 Facebook、Flickr、Google 和 Twitter 之类的服务中的用户身份。

当一个应用调用 Web 身份验证代理时,用户会得到一个对话框,其中呈现了要登录的必要网页。服务提供商必须允许用户明确同意该身份验证,通常包括一个“保持登录状态”选项。提供商还必须向用户阐明他们的身份信息如何使用,通常是通过从登录页面提供一个到隐私声明的链接来实现。用户完成这些步骤后,对话框将关闭,用户将回到应用中。

下图显示了一个模式对话框示例。

对用户进行身份验证的示例对话框

使用 Web 身份验证代理的好处

Web 身份验证代理提供下列好处:

  • 易于使用的编程界面,使应用开发人员无需在他们的应用中承载浏览器控件。
  • 将提供商的网页与 Windows 8 用户界面相集成。有关联机提供商的详细信息,请参阅联机提供商的 Web 身份验证代理
  • 与应用分离的用户凭据。
  • 对联机提供商单一登录的本机支持。

Web 身份验证代理的工作原理

Web 身份验证代理是你的应用和身份验证服务之间的代理或服务商。它由一组 API、一个代理和一个 Web 主机构成。你的应用使用 API 与代理通信。代理在一个独立的应用容器中创建一个新 Web 主机进程。代理与应用通信,组装用户界面 (UI) 并控制 Web 身份验证主机的生命周期。Web 身份验证主机呈现来自联机身份验证提供商的页面。

下图显示了使用 Web 身份验证代理的信息流。

Web 身份验证代理的数据流

使用 Web 身份验证代理的典型工作流如下所示:

  1. 1. 你的应用使用 WebAuthenticationBroker.AuthenticateAsync 方法调用 Web 身份验证代理。当身份验证调用完成时,你将提供开始请求 URI 和回调 URI。 它们对应于 OAuth 2.0 协议中的一个授权端点 URI 和重定向 URI。OpenID 协议和更早的 OAuth 版本具有类似的概念。
  2. 代理为调用应用创建一个模式系统对话框。
  3. 代理选择一个与调用应用或系统上的任何其他应用独立的专用应用容器,并清除任何持久性 cookie。注意  此应用容器决不会同时用于两个应用,除非在单一登录 (SSO) 模式下启动代理。  
  4. 代理在选定的应用容器中启动 Web 身份验证主机。
  5. 代理将主机的窗口附加到它之前创建的对话框。主机窗口负责呈现 Web 内容。
  6. Web 身份验证主机导航到请求 URI。这通常是一个登录页。
  7. 当用户通过单击链接或提交信息与联机提供商网站交互时,主机检查每个 URI,以查找与应用提供的一个回调 URI 匹配的值,然后再导航到它。
  8. 如果未找到匹配值,主机结束导航并通知代理。
  9. 代理关闭对话框,从应用容器清除主机创建的任何持久性 cookie,然后将协议数据返回到应用。

Web 身份验证代理单一登录的工作原理

Web 身份验证代理通过允许持久性 Cookie 位于具有特殊用途的 SSO 应用容器中来启用单一登录 (SSO)。若要使用此容器,你的应用可以调用 AuthenticateAsync 方法的重载,此方法不获取回调 URI。开始重定向 URL 必须采取“ms-app://<SID>”的形式,其中 <SID> 与调用包中的 SID 匹配。然后,你可以使用身份验证服务将你的每个应用注册为有效的重定向 URL(也称为“重定向终结点”)。

例如,Fabrikam 是使用 Contoso 所提供服务的 Windows 应用商店应用的开发人员。 在开发时,Fabrikam 向 Windows 开发人员中心注册了其应用,结果他收到了一个唯一的 SID。然后 Fabrikam 使用 Contoso.com 身份验证服务将它们的应用 SID 注册为有效的重定向 URL。Fabrikam 将它的两个 SID 注册为重定向 URL,其中一个是“ms-app://S-1-5-4321”。

在运行时,Fabrikam 的 Windows 应用商店应用在 SSO 模式下调用 Web 身份验证代理。在处理该请求的过程中,Contoso.com 验证重定向 URL 是否位于已注册的 URL 集合中。在 Contoso 对用户进行身份验证之后,它会重定向到在所请求的 URL 后面附加了访问令牌的 URL:“ms-app://S-1-5-4321?token=ABC”。当 Web 身份验证代理遇到采用此形式而且 SID 与调用应用的 SID 相匹配的 URL 时,它会返回查询字符串中所包含的令牌或者将数据重新发布到该应用。

如果在 SSO 应用容器中已经创建了任何 Cookie,则用户将不需要登录到 Contoso。如果任何其他应用尝试模拟 Fabrikam 的应用,则尝试将失败,这是因为 Contoso 通过确保正请求的是已经注册的一个重定向 URL 来验证应用的标识,而且 Web 身份验证代理确保只有与 Contoso 要重定向到的应用共用同一个 SID 的应用才获得协议数据。

Web 身份验证代理疑难解答

有多种方法为你的应用对 Web 身份验证代理 API 进行疑难解答,包括查看操作日志和使用 Fiddler 查看 Web 请求和响应。

操作日志

操作日志通常用来确定哪些内容不工作。有一个专门的事件日志通道 Microsoft-Windows-WebAuth\Operational,该通道允许网站开发人员了解 Web 身份验证代理正在如何处理其网页。为了启用操作日志,请启动 eventvwr.exe 并在 Application 和 Services\Microsoft\Windows\WebAuth 下面启用 Operational 日志。 而且,Web 身份验证代理还在用户代理字符串后面附加一个用来在 Web 服务器上标识其本身的唯一字符串。该字符串为 "MSAuthHost/1.0"。请注意,版本号可能会在将来更改,因此,你不应当在代码中依赖该版本号。下面是完整用户代理字符串的示例:

User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MSAuthHost/1.0)

操作日志的使用示例:

  1. 启用操作日志
  2. 运行 Contoso 社交应用程序显示 WebAuth 操作日志的事件查看器
  3. 所生成的日志条目可用来更详细地了解 Web 身份验证代理的行为。在本例中,这些行为包括:
    • 导航开始:记录 AuthHost 何时启动,包含有关起始和终止 URL 的信息。
    • 阐释“导航开始”的详细信息
    • 导航完成:记录网页已完成加载。
    • Meta 标记:记录何时遇到了 meta 标记(包括详细信息)。
    • 导航终止:导航由用户终止。
    • 导航错误:AuthHost 在某个 URL 处遇到一个导航错误(包括 HttpStatusCode)。
    • 导航结束:遇到了终止 URL。

将 Fiddler 与 Web 身份验证代理结合使用

Fiddler Web 调试程序可与 Windows 8 应用一起使用。

  1. 由于 AuthHost 在自己的应用容器中运行以实现它的私有网络功能,所以你必须设置注册表项: Windows 注册表编辑器版本 5.00

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\authhost.exe\EnablePrivateNetwork = 00000001

    •                      Data type
                           DWORD
  2. 为 AuthHost 添加规则,因为这是传出流量的来源。

    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.a.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
    CheckNetIsolation.exe LoopbackExempt -a -n=microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
    D:\Windows\System32>CheckNetIsolation.exe LoopbackExempt -s
    List Loopback Exempted AppContainers
    [1] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.c_8wekyb3d8bbwe
        SID:  S-1-15-2-1973105767-3975693666-32999980-3747492175-1074076486-3102532000-500629349
    [2] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.sso.p_8wekyb3d8bbwe
        SID:  S-1-15-2-166260-4150837609-3669066492-3071230600-3743290616-3683681078-2492089544
    [3] -----------------------------------------------------------------
        Name: microsoft.windows.authhost.a.p_8wekyb3d8bbwe
        SID:  S-1-15-2-3506084497-1208594716-3384433646-2514033508-1838198150-1980605558-3480344935
    
  3. 针对传入 Fiddler 的流量添加防火墙规则。

有关详细信息,请参阅有关针对 Windows 应用商店应用使用 Fiddler Web 调试器的博客

相关主题

联机提供商的 Web 身份验证代理

Web 身份验证代理示例

Windows.Security.Authentication.Web