2012-02-28 63 views
5

我試圖通過Google .Net GData客戶端庫生成OAuth訪問令牌。我一直在使用http://code.google.com/apis/gdata/docs/auth/oauth.html中的說明作爲指導,並且一直在努力,直到我嘗試呼叫OAuthUtil.GetAccessToken(parameters),此時我收到一個「(400)錯誤請求」Web異常。谷歌GData .Net OAuthUtil.GetAccessToken 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> 

這轉化爲標題的網頁響應這是像這樣:(添加換行符爲了可讀性)

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

+0

OAuth請求的HTTP響應代碼:http://oauth.net/core/1.0a/#http_codes – aitchnyu 2012-02-28 17:17:36

+0

使用fiddler檢查http響應(應該有一個錯誤代碼/描述,說明您爲什麼要獲得400響應在標題或正文中)或處理HttpWebException並檢查那裏的響應。 – JoshSchlesinger 2012-03-01 04:09:50

+0

請向我們展示創建OAuthParameters對象並請求令牌的實際代碼。 – VVS 2012-03-30 08:03:00

回答

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

+0

現在已經有點晚了,但是看看你指出的URL,當我想到它的時候,它似乎有點偏離(最後我檢查Google Docs與Google日曆無關)。無論如何,歡呼的答覆 - 這可能是解決我們的問題,如果我們還沒有采取不同的方法...... – 2012-04-10 11:09:17

0

使用真正的時間戳。它對時間和地區很敏感。