【问题标题】:Google GData .Net OAuthUtil.GetAccessToken 400 Bad RequestGoogle GData .Net OAuthUtil.GetAccessToken 400 错误请求
【发布时间】:2012-03-18 01:48:32
【问题描述】:

我正在尝试通过 Google .Net GData 客户端库生成 OAuth 访问令牌。我一直在使用http://code.google.com/apis/gdata/docs/auth/oauth.html 中的说明作为指导,并且一切正常,直到我尝试调用OAuthUtil.GetAccessToken( parameters ),此时我收到“(400)错误请求”网络异常。

不幸的是,它没有告诉我任何关于为什么这是一个糟糕的请求。所以,我对此有点困惑。我唯一的想法是,因为我使用的是localhost url,所以它不起作用(尽管我已经在 Google API 控制台中注册了该 url,而且似乎可以这样做)。

任何想法我在这里做错了什么以及我应该做些什么来使它正确?

OAuthParameters 对象是这样构造的(敏感数据已被审查,希望不会让人难以回答):

BaseProperties:
    oauth_consumer_key:     <CLIENT_KEY>,
    oauth_nonce:            <NONCE>
    oauth_signature_method: HMAC-SHA1
    oauth_timestamp:        1330440325
    oauth_token:            <TOKEN>
    oauth_verifier:         <VERIFIER>
Callback:        "http://localhost:57381/subscription_auth.aspx?c=google.calendar"
ConsumerKey:     <CLIENT_KEY>
ConsumerSecret:  <CLIENT_SECRET>
ExtraProperties
    oauth_consumer_secret: <CLIENT_SECRET>
    scope:                 https://docs.google.com/calendar/feeds/
    oauth_callback:        http://localhost:57381/subscription_auth.aspx?c=google.calendar
Nonce:           <NONCE>
Scope:           "https://docs.google.com/calendar/feeds/"
Signature:       NULL
SignatureMethod: "HMAC-SHA1"
Timestamp:       "1330440325"
Token:           <TOKEN>
TokenSecret:     NULL  -- No Token Secret was returned from the callback.
Verifier:        <VERIFIER>

这会转化为 Web 响应的标头,如下所示:

Authorization: OAuth oauth_version="1.0",
oauth_nonce=<NONCE>,
oauth_timestamp="1330441324",
oauth_consumer_key=<CLIENT_KEY>,
oauth_verifier=<VERIFIER>,
oauth_token=<TOKEN>,
oauth_signature_method="HMAC-SHA1",
oauth_signature=<SIGNATURE>

(为便于阅读添加了换行符)

注意:上述编辑值在与 GData 代码相关的地方被正确编码。

请求的uri是:https://www.google.com/accounts/OAuthGetAccessToken

根据位于此处的类,错误发生在第 186 行:http://code.google.com/p/google-gdata/source/browse/trunk/clients/cs/src/core/oauthutil.cs?r=1123

【问题讨论】:

  • OAuth 请求的 HTTP 响应代码:oauth.net/core/1.0a/#http_codes
  • 使用 fiddler 来检查 http 响应(应该有一个错误代码/说明为什么在标题或正文中得到 400)或处理 HttpWebException 并检查那里的响应。跨度>
  • 请向我们展示创建 OAuthParameters 对象并请求令牌的实际代码。
  • 嗯,不幸的是我从来没有找到解决这个问题的方法——我们最终使用了不同客户端库附带的 v3 API。根据我的经验,通过使用这些 API,关键是使用 Fiddler 或 Wireshark 之类的东西并检查原始请求。请特别注意传递了哪些参数以及它们的格式是否正确(例如,我们遇到了日期格式问题)。
  • 在仔细阅读 Barry 的回答后,我注意到我们用于 SCOPE 参数的 URL 在某种程度上是 Google Docs 和 Google Calendar 的混搭 - 这可能是问题所在.因此,如果您遇到类似问题,请务必仔细分析参数中的值。很遗憾,Google 不会确切地告诉您您做错了什么,因此需要您代表您进行一些仔细的调查。

标签: .net oauth gdata


【解决方案1】:

这可能完全不相关,但您在范围内指定的 URL

https://docs.google.com/calendar/feeds/

返回 404 错误

我认为您应该改用以下内容:

http://www.google.com/calendar/feeds/default/

或者可能是http://www.google.com/calendar/feeds/default/owncalendars/full

【讨论】:

  • 现在有点晚了,但是看看你指出的 URL,当我想到它时,它似乎有点不对劲(最后我检查了 Google Docs 与 Google Calendar 无关)。无论如何,为回复欢呼 - 如果我们还没有采取不同的方法,这可能是我们问题的解决方案......
【解决方案2】:

使用真实的时间戳。它对时间和地点很敏感。

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2013-07-21
    相关资源
    最近更新 更多