我编写了一个基于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被挂起。
是否存在此行为的解决方法?
答案 0 :(得分:3)
我终于得到了微软对此问题的回复:
Facebook Connect无法正常工作,因为它需要多个页面之间的通信,但Webauth Broker一次只能有一个活动。这里的问题是foursquare启动了一个用于facebook授权的弹出窗口,等待弹出窗口完成,并在第一个foursquare页面上触发事件。在webauth的情况下,我们导航到内联的所有弹出窗口,因此启动弹出窗口的第一个页面将消失,并且没有可以发送回第一页的事件。
结果是,没有解决方法,没有编写自己的登录过程并完全绕过WebAuthenticationBroker(我最终做了)。
TL; DR:WebAuthenticationBroker已损坏,目前尚无计划修复此问题。