UWP app Google身份验证可在台式机上使用,但不能在Xbox One上使用

时间:2019-02-15 22:44:18

标签: uwp google-authentication xbox-one

我已经使用WebAuthenticationBroker实施了google auth,如下所示。它在使用相同Google帐户的桌面版或Surface上完美运行,但是当我在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 :(得分:0)

我终于找到了解决方案。问题是使用WebAuthenticationOptions.UseTitle时使用此选项,它在桌面和表面Windows 10机器上都可以正常工作,但此选项不适用于Xbox One。它不返回任何授权码。

但是浏览器标题栏始终具有此代码,并且为了获取此代码,需要使用code。使用过的响应包含一个名为“ var queryStringParams = System.Web.HttpUtility.ParseQueryString(receivedData.ResponseData.Substring(receivedData.ResponseData); string code= queryStringParams["code"]; ”的元素,您可以按如下方式对其进行解析

WebAuthenticationOptions.None

使用code时,响应没有名为“ approvalCode”的queryString,而是“ WebAuthenticationOptions.UseTitle”。也有这种差异。我不知道为什么。但是无论如何awk可以用于所有UWP设备。我对所有东西都进行了测试,并且像魅力一样