【问题标题】:Google OAuth v2 for UWP适用于 UWP 的 Google OAuth v2
【发布时间】:2017-12-23 00:49:04
【问题描述】:

我是 OAuth 验证的新手,但这里的选项已经用完了,因为当我尝试访问 Google 的 OAuth 屏幕时,它从未向我提供访问代码。我可以访问登录屏幕,然后如果我选择允许或拒绝,它会给我一条成功消息。没有错误,但有时会给出无效协议的异常,但我不知道为什么会这样。

我正在尝试从 herehere 获得帮助,但没有任何效果。

我使用的代码如下:

        string state = GenerateRandomBase64Url(32);
        string code_verifier = GenerateRandomBase64Url(32);
        string code_challenge = GenerateBase64urlencodeNoPadding(sha256(code_verifier));

        string clientID = "1037832553054-2ktd0l6dop546i1ti312r2doi63sglfe.apps.googleusercontent.com";
        string redirectURI = "uwp.app:/oauth2redirect";
        string authorizationEndpoint = "https://accounts.google.com/o/oauth2/v2/auth";
        string tokenEndpoint = "https://www.googleapis.com/oauth2/v4/token";
        string userInfoEndpoint = "https://www.googleapis.com/oauth2/v3/userinfo";
        string youtubeScope = "https://www.googleapis.com/auth/youtube";
        string code_challenge_method = "S256";

        ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;
        localSettings.Values["state"] = state;
        localSettings.Values["code_verifier"] = code_verifier;

        string authorizationRequest = string.Format($@"{authorizationEndpoint}?response_type=code&scope={Uri.EscapeDataString(youtubeScope)}&redirect_uri={Uri.EscapeDataString(redirectURI)}&client_id={clientID}&state={state}&code_challenge={code_challenge}&code_challenge_method={code_challenge_method}&login_hint={EmailBox.Text.Trim()}");

        string endURL = "https://accounts.google.com/o/oauth2/approval?";
        // I don't know if this is actually valid because google says that this Url is not available
        Uri startURI = new Uri(authorizationRequest);
        Uri endURI = new Uri(endURL);
        string result = string.Empty;
        try
        {
            //var success = Windows.System.Launcher.LaunchUriAsync(new Uri(authorizationRequest));

            WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, startURI, endURI);
            switch (webAuthenticationResult.ResponseStatus)
            {
                // Successful authentication.  
                case WebAuthenticationStatus.Success:
                    result = webAuthenticationResult.ResponseData.ToString();
                    break;
                // HTTP error.  
                case WebAuthenticationStatus.ErrorHttp:
                    result = webAuthenticationResult.ResponseErrorDetail.ToString();
                    break;
                default:
                    result = webAuthenticationResult.ResponseData.ToString();
                    break;
            }

        }
        catch (Exception ex)
        {
            result = ex.Message;
        }
        response.Text = result;

 // the string that I get looks like this
 // https://accounts.google.com/o/oauth2/approval?as=410b4db829b95fce&pageId=none&xsrfsign=AMt42IIAAAAAWO9e-l2loPR2RJ4_HzjfNiGJbiESOyoh

我不知道这是否是在 UWP 应用程序中执行此操作的正确方法。此外,我从结果中得到的字符串只是一个 Url,它不包含任何被视为 code 的内容,如 Google 示例中所述。 那么有人可以指出我在这里做错了什么吗?这应该很简单,但我不知道我做错了什么。谢谢

【问题讨论】:

  • 我已经使用官方code sample 为 UWP 测试了 Google OAuth v2。我使用WebAuthenticationBroker.AuthenticateAsync 来获得网络认证结果。但是我无法重现您的问题,能否提供您的源代码,以便我可以对此问题进行更多测试?
  • 好吧,我猜这只是endURL末尾的?的问题,我把它放在这里但我没有在我的实际代码中使用它,我以某种方式对其进行了整理.不过还是谢谢。

标签: c# uwp google-oauth


【解决方案1】:

我不确定我上次是如何按照我的评论建议解决问题的。 UWP 中的WebAuthenticationBroker 不再那样工作了,或者至少我认为是这样。它实际上要求startURLcallbackURL

我遇到了同样的问题,就像我昨天的问题一样,我通过将我的应用程序的 redirectUri 代替 callbackURLWebAuthenticationBroker 解决了它不再抛出异常,它提供了一个成功的结果.

所以要解决这个问题,你会这样做:

string redirectURI = "uwp.app:/oauth2redirect";

Uri startURI = new Uri(authorizationRequest); // as in the question
Uri endURI = new Uri(redirectUri); // change to 'redirectUri'
WebAuthenticationResult webAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, startURI, endURI);
switch(webAuthenticationResult.ResponseStatus)
{
      case WebAuthenticationStatus.Success:
      break;
}

我希望它可以帮助那里的人。谢谢

【讨论】:

    猜你喜欢
    • 2015-11-07
    • 2021-09-20
    • 1970-01-01
    • 2015-01-25
    • 2018-04-28
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多