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

Я реализовал 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 ответ

Я наконец нашел решение. Проблема заключается в использовании 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. Я проверил на всех и работает как шарм

Другие вопросы по тегам