如果从foursquare传递到Facebook,WebAuthenticationBroker会挂起

时间:2012-09-12 12:30:38

标签: windows-8 windows-runtime oauth-2.0 foursquare facebook-oauth

我编写了一个基于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注册,则此工作正常。但是,foursquare OAuth页面为用户提供了通过Facebook登录/注册的选项。如果选中,则初始Facebook登录屏幕会正确显示;用户可以输入用户名/密码并选择“登录”按钮;然后窗口变成空白。似乎控制权被传递到Facebook的弹出窗口,提示授予权限。但是,WebAuthenticationBroker未显示此内容。出于所有意图和目的,WebAuthenticationBroker被挂起。

是否存在此行为的解决方法?

1 个答案:

答案 0 :(得分:3)

我终于得到了微软对此问题的回复:

  

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

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

TL; DR:WebAuthenticationBroker已损坏,目前尚无计划修复此问题。