Приложение UWP Google Authentication работает на рабочем столе, но не на Xbox One

Я реализовал аутентификацию Google с помощью WebAuthenticationBroker, как показано ниже. Он отлично работает на рабочем столе или Surface с использованием той же учетной записи Google, но когда я пробую его на Xbox, он не работает.

     string authString = "https://accounts.google.com/o/oauth2/auth?client_id=" + Uri.EscapeDataString(ClientID);
                authString += "&scope=openid%20email%20profile";
                authString += $"&redirect_uri={Uri.EscapeDataString(RedirectURI)}";           
                authString += $"&code_challenge={code_challenge}";
                authString += $"&code_challenge_method={code_challenge_method}";
                authString += "&response_type=code";
                authString += "&include_granted_scopes=true";

     string endURL = "https://accounts.google.com/o/oauth2/approval";
   Uri startURI = new Uri(authString);
      Uri endURI = new Uri(endURL);
   var receivedData = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, startURI, endURI);

В UWP я получаю Approval_Code и полную информацию о профиле, но в Xbox ответ выглядит примерно так:

{https://accounts.google.com/o/oauth2/approval?as=xxxxxxxx=none&xsrfsign=xxxxxx}

Кто-нибудь знает, что особенного в Xbox One? как это исправить?


person Emil    schedule 15.02.2019    source источник


Ответы (1)


Я наконец нашел решение. Проблема заключается в использовании WebAuthenticationOptions.None при использовании этой опции, она отлично работает на настольных и поверхностных компьютерах с Windows 10, но эта опция не работает правильно для Xbox One. он не возвращает код авторизации.

Но в строке заголовка браузера всегда есть этот код, и для его получения необходимо использовать WebAuthenticationOptions.UseTitle. После использования ответа есть элемент с именем «code», и вы можете просто проанализировать его, как показано ниже.

      var queryStringParams = System.Web.HttpUtility.ParseQueryString(receivedData.ResponseData.Substring(receivedData.ResponseData);

string code= queryStringParams["code"];

При использовании WebAuthenticationOptions.None в ответе queryString называется не "code", а "approvalCode". есть и эта разница. Я не знаю почему. Но в любом случае WebAuthenticationOptions.UseTitle можно использовать для всех устройств UWP. Я проверил на всех и работает как шарм

person Emil    schedule 16.02.2019