Приложение UWP Google Authentication работает на рабочем столе, но не на Xbox One - PullRequest
0 голосов
/ 16 февраля 2019

Я реализовал Google Auth, используя WebAuthenticationBroker, как показано ниже.Он отлично работает на рабочем столе или поверхности с использованием той же учетной записи 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?как это исправить?

1 Ответ

0 голосов
/ 16 февраля 2019

Я наконец нашел решение.Проблема заключается в использовании 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 в ответе не указано queryStringcalled "code", а как "approvalCode",есть и эта разница.Я не знаю почему.Но в любом случае WebAuthenticationOptions.UseTitle можно использовать для всех устройств UWP.Я проверил на всех и работает как шарм

...