【问题标题】:Getting OAuth access token for Google Plus API获取 Google Plus API 的 OAuth 访问令牌
【发布时间】:2012-06-07 07:58:21
【问题描述】:

我目前正在为 google plus 开发一个应用程序。我想从 google plus API 获取访问令牌。我想使用 OAuth 2.0 来获取访问令牌。我已经构建到 URL

“https://accounts.google.com/o/oauth2/auth?client_id=752264386186- 72f3ef2ok1j3k8g12h7hg8k5kjt9s9si.apps.googleusercontent.com&scope=https: //www.googleapis.com/auth/plus.me&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code"

当我通过浏览器粘贴时要求使用我的谷歌帐户登录。因此,当我输入我的凭据时,它会询问“允许访问”或“不,谢谢”。当我单击“允许访问”时,它会在我的浏览器中为我提供访问令牌。我希望使用我的 C# 代码完成上述步骤。

身份验证成功后,如何从代码导航到授权页面并获取访问令牌。我应该使用 httpwebrequest 或 webclient 还是休息一下。也请提供一些示例代码。

【问题讨论】:

  • 网上有OAuth 2.0 SDK,你会发现,他们的设计目的是让用户确认交易。避免那部分你不会有太多运气。
  • 我可以参考的任何链接或示例代码?
  • 在嵌入式 WebBrowser 控件中按预期使用显示它,监听 Navigating 事件,并查找令牌
  • 我试图从导航事件参数 e.uri.fragment 中获取访问令牌,但它为空。所以想使用回调对象获取访问令牌。我需要一些帮助来使用 HttpWebRequest 从谷歌获取访问令牌。

标签: c# windows-phone-7


【解决方案1】:

如果您可以使用 WebBrowser,这里有一个简单的示例,我是如何使用 Foursquare API 做同样的事情的。这段代码只是为了测试它的运行情况而编写的,所以我确信它缺少一些重要的东西,比如错误处理等。

 private void button1_Click(object sender, RoutedEventArgs e)
    {
        string address =
            "https://foursquare.com/oauth2/authenticate" +
            "?client_id=" + CLIENT_ID +
            "&response_type=token" +
            "&redirect_uri=" + CALLBACK_URI;
        webBrowser1.Navigated += new EventHandler<System.Windows.Navigation.NavigationEventArgs>(webBrowser1_Navigated);
        webBrowser1.Navigate(new Uri(address, UriKind.Absolute));
    }

    void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        response = e.Uri.ToString();
        System.Diagnostics.Debug.WriteLine(e.Uri.ToString());
        if (response.LastIndexOf("access_token=") != -1)
        {
            string token = response.Substring(response.LastIndexOf("#access_token=") + "#access_token=".Length);
            System.Diagnostics.Debug.WriteLine("TOKEN: " + token);
        }
    }

一旦您允许访问,您最终会获得带有 access_token 的回调 URI。请注意,webBrowser1_Navigated 可能会被多次调用(每次您在嵌入式 Web 浏览器中导航到另一个页面时)。

【讨论】:

  • 对不起,我有一个问题,什么是“响应”类型。当我声明响应是 HttpWebResponse 类型时,它会抛出一个错误。
  • 这是一个从 e.Uri.ToString() 得到的字符串。虽然使用 e.Uri.AbsoluteUri 可能会更好。
【解决方案2】:

这段代码是史诗般的,简直太棒了。

【讨论】:

  • 请将您的 cmets 放在评论区,而不是答案中..!! :)
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 2014-07-15
  • 2014-07-08
  • 2014-04-18
  • 2023-03-27
  • 2012-08-03
  • 2021-01-10
  • 2015-02-22
相关资源
最近更新 更多