我已经使用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有什么特别之处吗?该如何解决?
答案 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设备。我对所有东西都进行了测试,并且像魅力一样