Google GData .Net OAuthUtil.GetAccessToken 400错误请求

时间:2012-02-28 15:14:06

标签: .net oauth gdata

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

不幸的是,它没有告诉我任何关于为什么这是一个糟糕的请求。所以,我对此感到困惑。我唯一的想法就是,因为我使用的是localhost网址,但它无效(虽然我已经在Google API控制台中注册了网址,但这样做似乎没问题。)

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

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

2 个答案:

答案 0 :(得分:1)

这可能完全不相关,但您在范围中指定的网址

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

返回404错误

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

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

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

答案 1 :(得分:0)

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