2

WebAuthenticationBroker.AuthenticateAsync呼び出しを介してfoursquareに接続するXAMLベースのWinRTアプリを作成しました。認証コードは次のとおりです。

        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はハングしています。

この動作の回避策はありますか?

4

1 に答える 1

3

私はついにこの問題についてマイクロソフトから回答を得ることができました:

Facebook Connectは複数のページ間の通信を必要とするため機能しませんが、WebauthBrokerは一度に1つしかアクティブにできません。ここでの問題は、foursquareがFacebook認証用のポップアップを起動し、ポップアップが完了して最初のfoursquareページでイベントが発生するのを待つことです。webauthの場合、すべてのポップアップにインラインで移動するため、ポップアップを起動する最初のページが表示されなくなり、最初のページに送り返すことができるイベントはありません。

結果として、独自のログインプロセスをコーディングし、WebAuthenticationBrokerを完全にバイパスする以外に回避策はありません(私はこれを実行することになりました)。

TL; DR:WebAuthenticationBrokerが壊れており、現時点で修正する予定はありません。

于 2012-10-02T15:06:50.787 に答える