2

我编写了一个基于 XAML 的 WinRT 应用程序,它通过 WebAuthenticationBroker.AuthenticateAsync 调用连接到foursquare。这是授权代码:

        public async Task<string> FsqAuthenticate()
    {
        var fsqAuthUrl = string.Format(
            "https://foursquare.com/oauth2/authenticate?client_id={0}&response_type=code&redirect_uri={1}&display=webpopup", 
            ClientId, RedirectUri);
        var requestUri = new Uri(fsqAuthUrl, UriKind.RelativeOrAbsolute);
        var redirUri = new Uri(RedirectUri, UriKind.RelativeOrAbsolute);
        string authCode = string.Empty;
        string authToken = string.Empty;

        try
        {
            ResponseErrorMsg = string.Empty;

            WebAuthenticationResult WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
                WebAuthenticationOptions.None,
                requestUri, redirUri);

            if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)
            {

如果用户选择直接通过foursquare 进行身份验证,或者通过foursquare 注册,则此方法可以正常工作。但是,方形 OAuth 页面为用户提供了通过 Facebook 登录/注册的选项。如果选中,初始 Facebook 登录屏幕将正确显示;用户可以输入用户名/密码并选择“登录”按钮;然后窗口变为空白。似乎控制权正在传递给 Facebook 的弹出窗口,提示您授予权限。但是,WebAuthenticationBroker 没有显示这个。出于所有意图和目的,WebAuthenticationBroker 已挂起。

这种行为是否存在解决方法?

4

1 回答 1

3

我终于能够在这个问题上得到微软的回应:

Facebook Connect 无法工作,因为它需要在多个页面之间进行通信,但 Webauth Broker 一次只能激活一个。这里的问题是foursquare为facebook授权启动一个弹出窗口并等待弹出窗口完成并在第一个foursquare页面上触发一个事件。在 webauth 的情况下,我们导航到所有内联弹出窗口,因此启动弹出窗口的第一页将消失,并且没有可以发送回第一页的事件。

结果是,除了编写自己的登录过程并完全绕过 WebAuthenticationBroker 之外,没有任何解决方法(我最终这样做了)。

TL;DR:WebAuthenticationBroker 已损坏,目前没有修复它的计划。

于 2012-10-02T15:06:50.787 回答