2016-10-24 320 views
1

我在很多問題中看到過這個問題,但到目前爲止,似乎沒有一個適用於我的情況。在爲訪問令牌交換刷新令牌時出現「invalid_grant」錯誤

我們遇到的問題是,當我們嘗試獲取訪問令牌時,我們會收到「invalid_grant」錯誤。這隻發生在一些賬戶上,但是當它發生時,在我看到的每一種情況下,刷新標記都已經工作過,現在已停止工作。這種情況發生的頻率非常高,因爲它是客戶撤銷訪問的數據(似乎近20%的我們在過去幾周管理的渠道已經失效)。

請注意,我們有一個後端流程,可將視頻上傳到我們客戶的YouTube頻道。

  1. 我們使用的OAuth2獲得刷新令牌,這裏有我們發送的參數...

    範圍= 「https://www.googleapis.com/auth/youtube」, CLIENT_ID = 「」, RESPONSE_TYPE = 「代碼」, ACCESS_TYPE = 「離線」, approval_prompt = 「力」, REDIRECT_URI = 「http://www.us.com/OAuth/YouTube

注:CLIENT_ID我們使用的電子郵件地址在Google API管理器中(或者,我只是看了一下,現在已經不存在了)。我們過去使用這個頁面的客戶端ID,但是這也給我們帶來了問題。這個改變了嗎?我們現在應該從這個頁面使用客戶端ID嗎?

  1. 我們交換爲刷新和訪問令牌返回的代碼,並將刷新令牌存儲在我們的數據庫中。

  2. 後端進程爲訪問令牌交換刷新令牌,這就是我們似乎正在得到「invalid_grant」錯誤的地方。

只保證通道的單個訪問令牌隨時都在使用中(不適用25限制)。我們不存儲訪問令牌,每當我們處理一個頻道時,我們會得到一個新的訪問令牌。

任何想法可能發生什麼?有什麼東西要找?請參閱上面有關客戶端ID的說明這可能與它有關,但由於之前使用API​​管理器的「客戶端ID」導致了問題,所以我很猶豫。

回答

0

這裏是爲什麼令牌停止工作,併成爲無效的可能原因:

  • 用戶已取消訪問。
  • 令牌未使用六個月。
  • 用戶更改密碼,令牌包含Gmail作用域。
  • 用戶帳戶已超過一定數量的令牌請求。

正如您所看到的,建議您不要在每次處理頻道時申請一個新的頻道。正如Token expiration還提到:

如果需要授權多個程序,機器或設備,一個解決辦法是限制你每個用戶帳戶的授權,以15或20客戶端的數量。如果你是一個谷歌應用程序管理員可以創建其他管理員用戶並使用他們授權某些客戶端。

關於使用client_ID,通常需要調用登錄API,如Creating a Google API Console project and client ID中所述。

最後,這個Google網上論壇討論 - OAuth 2.0 400 - error:invalid_grant and ideas?也可能有所幫助。

+0

謝謝。我已經看過這些資源,並且這些都不適用。我收到此錯誤的帳戶最近已成功處理,因此令牌未過期,並且有太多錯誤讓用戶撤銷令牌(我們的用戶不那麼複雜)。我們確實重複使用訪問令牌來上傳/更新/刪除特定頻道的所有視頻,但是之後我們會將其丟棄,因爲無論如何,它只能播放1小時(我們不會再處理此頻道,會過期)。 – Brian

+0

你有沒有解決過這個問題?我得到同樣的問題 – Kesty

0

只保證通道的單個訪問令牌隨時都在使用中(不適用25限制)。我們不存儲訪問令牌,每當我們處理一個頻道時,我們會得到一個新的訪問令牌。

此聲明不正確:訪問令牌可以根據需要多次使用,但它們仍然很好(一小時)。

答:

「invalid_grant」 基本上是你的刷新令牌不再有效。解決此問題的唯一方法是再次請求訪問並獲取新的訪問權限。問題應該是爲什麼它首先到期。

假設用戶沒有撤​​銷訪問,並且刷新標記已用於在過去六個月內請求新的訪問令牌。這可能是一個問題,它被寫過。

當用戶驗證您的應用程序時,您會收到刷新令牌。此刷新令牌與您的應用程序的客戶端ID和剛認證的用戶相關聯。如果所述用戶再次認證您的應用程序,您將獲得另一個刷新令牌。此刷新標記又與用戶和項目客戶端ID關聯。這兩個刷新令牌都可以使用。你的用戶可以繼續這樣做25(注:我認爲最近更改爲50,但我還沒有測試過所有的API),一旦它們已經達到這個神奇數字,第一個刷新令牌將過期,如果你嘗試和使用它會得到一個無效的資助。

然後唯一的解決方案就是再次請求驗證。始終保存用戶授予您的應用程序的最新刷新令牌非常重要。在事件中(像我一樣),你有一個應用程序存儲在許多需要認證的服務器上。您必須告訴他們不要多次刷新它,否則他們將不得不返回並重新驗證他們過期的第一個。

如果您的所有請求都發生這種情況。您還可以檢查您的服務器是否與(NTP)同步,並且您在發佈字段中發送請求的有效載荷。沒有像HTTP GET那樣附加到認證結束點(那裏已經完成了)。

+0

感謝您的詳細消息。 我意識到一次可以使用多個訪問令牌,我的聲明只是說我們不這樣做。 我們不到1%的頻道發生了這種情況,幾乎每一個頻道都在幾天之內成功處理,然後纔會變壞。這似乎是YouTube API的一個錯誤,因爲它幾個星期前剛開始(我們沒有改變),今天似乎已經平靜下來。我認爲我們看到了它,因爲我們的數量太大,以至於API中行爲的小改變會對我們產生顯着的影響。 – Brian

相關問題