2015-09-04 44 views
1

我有一個web服務器與IOS應用程序進行通信,爲用戶獲取離線訪問令牌/刷新令牌對。直到最近,在沒有任何代碼更改的情況下,這似乎運行良好,大多數身份驗證請求都開始失敗。我一直在試圖調試"invalid_grant"似乎非確定性的錯誤。一個用戶可能會嘗試多次使用Google接受的一些嘗試進行身份驗證,有些則不會。我們看到進來以下形式的錯誤(我們使用的是谷歌的Java API客戶端):使用說明調試「invalid_grant」錯誤:「代碼無效。」

com.google.api.client.auth.oauth2.TokenResponseException400 Bad Request { "error" : "invalid_grant", "error_description" : "Invalid code." } 
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) 
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) 
at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:158) 

我試圖確保我們正在運行此服務器與NTP正確同步時鐘。

我在這裏如何進行一點點的損失。你將如何調試?

+0

你看過[這個問題](http://stackoverflow.com/questions/10025698/authentication-on-google-oauth2-keeps-returning-invalid-grant)或[this one?](http ://stackoverflow.com/questions/24002970/google-oauth-token-exchange-returns-invalid-code) –

+0

我沒有特別看過這些帖子,但我很確定它不重複使用授權因爲將它交換爲訪問令牌/刷新令牌對有時會成功。我們確定在10分鐘內使用訪問令牌(應始終在10秒內使用)。第二篇文章似乎涉及過期訪問令牌而不是脫機訪問/刷新令牌對的問題。澄清:我們看到的問題都是在初始交換訪問/刷新令牌對的認證碼時。 –

+0

噢,我也嘗試通過security.google.com撤銷我的應用程序對我的Google帳戶的訪問權限,無效。仍然收到「invalid_grant」錯誤。 –

回答

0

我也試圖用java api客戶端來緩解這個錯誤,並且我發現的最可能的原因是格式錯誤的請求或無效的用戶名或密碼。換句話說,將正確的密碼指向錯誤的路徑(通常在編輯資源後發生)也導致它。 在連續的請求之間也提供顯着的延遲有時可用。