快速入门:连接到联机标识提供商 (HTML)

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

本主题向你展示如何 将你的 Windows 应用商店应用连接到使用 Internet 身份验证和授权协议(如 OpenID 或 OAuth)的联机标识提供商

Windows 应用商店应用使用 Web 身份验证代理连接到联机标识提供商。应用调用 AuthenticateAsync 方法,该方法将一个请求发送给联机标识提供商,并取回描述应用访问的提供商资源的访问令牌。有关完整示例,请参阅 Web 身份验证代理示例。有关 Web 身份验证代理的详细信息,请参阅 Web 身份验证代理。有关参考文档,请参阅 Windows.Security.Authentication.Web

当你完成此主题时,请查看以下内容:

先决条件

  • 你应当熟悉 JavaScript。
  • 你应当熟悉你的联机标识提供商的身份验证要求。

向联机提供商注册应用

你必须将你的应用注册到要连接到的联机标识提供商。你可以从标识提供商处找到如何注册应用的信息。在注册后,联机提供商通常会向你提供你的应用的 ID。

建立身份验证请求 URI

请求 URI 由以下内容组成:你将身份验证请求发送到联机提供商的地址,其中附有其他所需信息,例如应用 ID 或机密信息、用户在完成身份验证后发送的重定向 URI 以及预期响应类型。你可以从你的提供商处找到需要的参数。

请求 URI 作为 authenticateAsync 方法的 requestUri 参数进行发送。它必须是安全地址(即,必须以 https:// 开始)

下例介绍如何建立请求 URI。


        var startURL = "https://<providerendpoint>?client_id=<clientid>&scope=<scopes>&response_type=token"; 

        var startURI = new Windows.Foundation.Uri(startURL);

连接到联机提供商

调用 authenticateAsync 方法以连接到联机标识提供商并获取访问令牌。该方法将上一步骤中构建的 URI 用作 requestUri 参数,并将你希望用户被重定向到的 URI 用作 callbackUri 参数。

下例介绍如何连接到联机标识提供商。

authzInProgress = true; 
        Windows.Security.Authentication.Web.WebAuthenticationBroker.authenticateAsync( 
            Windows.Security.Authentication.Web.WebAuthenticationOptions.none, startURI,endURI) 
            .done(function (result) { 
                document.getElementById("AnyServiceReturnedToken").value = result.responseData; 
                document.getElementById("AnyServiceDebugArea").value += "Status returned by WebAuth broker: " + result.responseStatus + "\r\n"; 
                if (result.responseStatus === Windows.Security.Authentication.Web.WebAuthenticationStatus.errorHttp) { 
                    document.getElementById("AnyServiceDebugArea").value += "Error returned: " + result.responseErrorDetail + "\r\n"; 
                } 
                authzInProgress = false; 
            }, function (err) { 
                WinJS.log("Error returned by WebAuth broker: " + err, "Web Authentication SDK Sample", "error");         
                document.getElementById("AnyServiceDebugArea").value += " Error Message: " + err.message + "\r\n"; 
                authzInProgress = false; 
            }); 

使用单一登录 (SSO) 连接。

默认情况下,Web 身份验证代理不允许保留 cookie。正因为如此,所以即使应用用户指示他们希望保留登录状态(例如,通过选择提供商的登录对话框中的复选框),他们也将必须在每次希望访问该提供商的资源时登录。若要使用 SSO 登录,则联机提供商必须为 Web 身份验证代理启用 SSO,而你的应用必须调用未获取 callbackUri 参数的 authenticateAsync 的重载。

若要支持 SSO,则联机提供商必须允许你采用 ms-app://appSID 形式注册重定向 URI,其中 appSID 为你的应用的 SID。通过调用 getCurrentApplicationCallbackUri 方法,你可以从 Windows 应用商店开发人员页面中为你的应用找到应用的 SID。

下例介绍如何使用 SSO 连接到联机标识提供商。

var redirectURL = Windows.Security.Authentication.Web.WebAuthenticationBroker.getCurrentApplicationCallbackUri().absoluteUri;
        var startURL = "https://<providerendpoint>?client_id=<clientid>&redirect_uri=" + encodeURIComponent(redirectURL) + "&scope=<scopes>&response_type=token"; 

        var startURI = new Windows.Foundation.Uri(startURL); 

        Windows.Security.Authentication.Web.WebAuthenticationBroker.authenticateAsync( 
            Windows.Security.Authentication.Web.WebAuthenticationOptions.none, startURI) 
            .done(function (result) { 
                if (result.responseStatus === Windows.Security.Authentication.Web.WebAuthenticationStatus.errorHttp) { 
                    document.getElementById("FacebookDebugArea").value += "Error returned: " + result.responseErrorDetail + "\r\n"; 
                } 

                // Parse out the OAuth token from result.responseData 

            }, function (err) { 
                WinJS.log("Error returned by WebAuth broker: " + err, "Web Authentication SDK Sample", "error"); 
            });

预览 Blend 中经身份验证的应用状态

如果你正在运行时使用 authenitcateUserAsync 对应用进行身份验证,你可以使用相同的凭据访问 Blend for Microsoft Visual Studio 2013 中应用的经身份验证的状态。这意味着你可以打开你的应用的经身份验证的版本,对外观进行更改,然后预览你刚刚进行的更改,而且无需退出 Blend。

  1. 在 Blend 中,在“设备”面板中的“设计时间”****类别中,选择“身份验证”。Blend 中的“设备”面板
  2. 按 F5 构建并运行应用。
  3. 使用凭据登录到应用中。
  4. 返回 Blend 并重新加载应用。
  5. 返回部署的应用并按 Alt+F4 关闭它。 注意  每次只能运行一个应用包身份的实例。由于 Blend 中应用的经身份验证的视图使用与应用的部署版本相同的包身份,因此应用无法在 Blend 中运行的同时在后台运行。  
  6. 返回 Blend 以继续工作。

摘要

在本主题中,我们介绍了如何连接到联机标识提供商,其中包括启用和不启用 SSO 两种方法。

相关主题

开发 Windows 应用商店应用

Web 身份验证代理示例

Web 身份验证代理

Windows.Security.Authentication.Web