Приложение 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. Я проверил на всех и работает как шарм