2014-01-24 202 views
1

我正在編寫需要訪問Google任務API的Java客戶端應用程序。我正在按照頁面https://developers.google.com/accounts/docs/OAuth2InstalledApp中的說明進行操作,並設法獲得授權碼。但是,當我嘗試獲取訪問令牌時,我不斷收到錯誤400「錯誤的請求」。錯誤401向Oauth2請求來自Google的訪問令牌

我使用Firefox附加組件測試。我發個帖子請求https://accounts.google.com/o/oauth2/token與內容:

code=<the-code-i-got-in-step1>& 
client_id=1097620474561-gusvm8cq428h86r7pcum285cuffssncj.apps.googleusercontent.com& 
client_secret=,my-client-secret>& 
redirect_uri=hurn:ietf:wg:oauth:2.0:oob& 
grant_type=authorization_code 

什麼,我可能是做錯了什麼建議?

+0

跟蹤實際的HTTP您的應用程序發送幫我製作一個代碼初始請求時需要進行。然後去Oauth Playground並在那裏執行相同的步驟,注意http請求。比較兩者。這可能與對參數進行URL編碼一樣簡單。 – pinoyyid

+0

我可以在OAUTH遊樂場裏完成遊戲,至少我可以看到成功的反應會是什麼樣子,但我仍然無法獲得自己的客戶端ID。不幸的是,我無法使用wireshark跟蹤HTTP會話,因爲它使用的是HTTPS。 –

+0

在Oauth遊樂場,如果你點擊齒輪圖標,你可以輸入你自己的客戶端憑證。試一下,這樣你可以消除,如果它是一個編碼問題或設置問題。 – pinoyyid

回答

0

如果它是一個400錯誤(而不是401 - 兩個代碼在你的問題中提到),則是最有可能請求的格式不正確,檢查一般的HTTP的東西,如:

  1. 確保它是一個POST - 並且您將數據作爲正文,而不是作爲查詢字符串。
  2. Content-Length已設置。
  3. Content-Type設置爲application/x-www-form-urlencoded。
  4. 每個表單參數其實url編碼

我會建議利用了谷歌提供在可能情況下,對已安裝的客戶端應用程序的例子可以在這裏找到客戶端庫: https://code.google.com/p/google-api-java-client/wiki/OAuth2#Installed_Applications

+0

我確實正在使用正文中的數據進行POST,而不是查詢字符串。內容類型設置爲application/x-www-form-urlencoded,並且內容長度由Poster附加組件自動設置。 –

+0

Yesyerday我得到了一個錯誤401(對錯誤400的引用是一個錯字),但是當我今天再次嘗試時,我得到錯誤代碼404 - 找不到。 –

+0

我發現我沒有正確的URL編碼我的一個參數。當我解決這個問題時,我仍然得到一個錯誤,但它是不同的。我得到了HTTP代碼= 400和JSON錯誤「Invalid Grant」 –

相關問題