WebAuthenticationBroker зависает при передаче в Facebook с Foursquare

Я написал приложение WinRT на основе XAML, которое подключается к Foursquare через вызов WebAuthenticationBroker.AuthenticateAsync. Вот код авторизации:

        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 завис.

Существует ли обходной путь для такого поведения?


person SWalters    schedule 12.09.2012    source источник


Ответы (1)


Наконец-то мне удалось получить ответ от Microsoft по этому вопросу:

Facebook Connect не будет работать, так как для этого требуется связь между несколькими страницами, но Webauth Broker может одновременно активировать только одну. Проблема здесь в том, что Foursquare запускает всплывающее окно для авторизации в Facebook и ожидает завершения всплывающего окна и запуска события на первой странице Foursquare. В случае webauth мы переходим ко всем всплывающим окнам в строке, поэтому первая страница, которая запускает всплывающее окно, исчезнет, ​​и нет никакого события, которое можно было бы отправить обратно на первую страницу.

В результате нет обходного пути, кроме кодирования вашего собственного процесса входа в систему и полного обхода WebAuthenticationBroker (что я в конечном итоге и сделал).

TL;DR: WebAuthenticationBroker не работает, и в настоящее время нет планов по его исправлению.

person SWalters    schedule 02.10.2012