2014-09-25 269 views
2

我正在使用具有預構建OAuth2連接器的圖形框架構建集成組件。 此框架需要進行以下的OAuth的v2的領域:OAuth v2(Google API)失效訪問令牌

  • 格蘭特型
  • 範圍
  • Auth服務器URL
  • 客戶編號
  • 客戶端密鑰
  • 訪問令牌
  • 刷新令牌

我需要從Google Analytics API獲取數據,因此我去了Google開發者控制檯 (https://console.developers.google.com/project/927890000889/apiui/credential)。我生成了一個'Web應用程序的客戶端ID'。從這個對象的參數,我能夠填補一些參數上面

  • 格蘭特類型:「authorisation_code」
  • 客戶ID:「RANDOMCHARSam5o37nsiu730d.apps.googleusercontent.com」
  • 客戶祕密:「 RANDOMCHARSiSwBA5OH5qYLUa」

然後使用谷歌OAuth園地(https://developers.google.com/oauthplayground),我是能夠填補缺失位

一切正常,我我有權訪問並從Google Analytics獲取數據,但僅僅幾分鐘後,如果我重試,我會收到授權失敗錯誤。 我相信問題與訪問令牌的到期有關,但我不知道如何解決這個問題。 值得一提的是這個活動是批量的(沒有人爲交互),所以沒有人可以請求一個新的訪問令牌。 集成框架是不可擴展的(我不能編寫代碼來更新代碼),所以我相信有一種方法可以獲得永不過期的訪問令牌或某種其他機制來實現相同的結果。底線,我不確定自從一開始就正確接近要求(Web應用程序的客戶端ID)。

任何幫助是非常讚賞, 喬瓦尼

回答

12

訪問令牌通常在60分鐘後到期。如果您有刷新令牌,則可以使用刷新令牌來獲取新的(有效的)訪問令牌。

本文檔介紹瞭如何做到這一點:
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

正確地回答你的首要問題,是的,你正在接近的一切。所有你需要做的就是通過刷新它來處理訪問令牌已過期的情況。另外,當你最初請求訪問令牌時,響應應該告訴你它有效的時間有多長,所以你只應該刷新那個令牌過期的令牌。

+0

嘿菲利普,感謝您的幫助。 我看了一下你給我的鏈接。 我的理解是,當access_token過期時,refresh_token不會。 因此,一旦access_token過期,如果我使用refresh_token發送請求,則Google Oauth實施會將我可以用來訪問資源的新access_token發送給我(在我的情況下,向Google Analytics API進行身份驗證)。 我的理解是否正確? 乾杯,喬凡尼 – 2014-09-26 04:18:50

+0

是的,這是完全正確的。請記住,刷新令牌請求可能會失敗。在原授權人撤銷訪問的情況下會發生這種情況,但如果您是原始授權人,那麼顯然您不必擔心這一點。 – 2014-09-26 05:02:35

+0

我們可以通過刷新令牌請求多少訪問令牌嗎?所以我可以永久使用它,並按時訪問用戶?是嗎? – 2016-08-12 10:43:47

0

您可以使用刷新令牌使其更長使用。 Google Auth服務器發出的刷新令牌永不過期, 令牌可能因以下原因之一而停止工作: 用戶已撤銷訪問權限。 該令牌尚未使用六個月。 用戶更改了密碼,並且令牌包含Gmail範圍。 用戶帳戶已超過特定數量的令牌請求。目前每個用戶帳戶最多有50個刷新令牌,每個用戶帳戶 。如果達到限制,創建新令牌會自動使最舊的令牌無效,而不會發出警告。 此限制不適用於服務帳戶。

from:https://developers.google.com/identity/protocols/OAuth2