2016-11-10 108 views
2

我知道有很多類似的問題,'invalid_grant'是我們從google api獲得的唯一'答案',但它們都是舊的,或者討論不同的獲取方式到相同的消息。刷新OAuth2令牌時出現錯誤@ Google_CalendarServices(php)

奇怪的是,這個'東西'在2天前才停止工作。在我們的CRM中,我們將會議預訂到與GoogleAccount相關聯的GoogleCalendars中。現在在過去的兩天裏,我們遇到了問題,從未發生過。

申請失敗是這樣的:

Fatal error: Uncaught exception 'Google_AuthException' with message 'Error refreshing the OAuth2 token, message: '{"error" : "invalid_grant";} 

Stack trace: 

#0 /path/to/plugins/google-api-php-client/src/auth/Google_OAuth2.php(240): Google_OAuth2->refreshTokenRequest(Array) 
#1 /path/to/plugins/google-api-php-client/src/auth/Google_OAuth2.php(217): Google_OAuth2->refreshToken('1/ourtoken...') 
#2 /path/to/plugins/google-api-php-client/src/service/Google_ServiceResource.php(167): Google_OAuth2->sign(Object(Google_HttpRequest)) 
#3 /path/to/plugins/google-api-php-client/src/contrib/Google_CalendarService.php(494): Google_ServiceResource->__call('insert', Array) 

這是實際的HTTP答案:

 
Google_HttpRequest Object 
(
    [batchHeaders:Google_HttpRequest:private] => Array 
     (
      [Content-Type] => application/http 
      [Content-Transfer-Encoding] => binary 
      [MIME-Version] => 1.0 
      [Content-Length] => 
     ) 

    [url:protected] => https://accounts.google.com/o/oauth2/token 
    [requestMethod:protected] => POST 
    [requestHeaders:protected] => Array 
     (
      [content-type] => application/x-www-form-urlencoded 
      [content-length] => 196 
     ) 

    [postBody:protected] => client_id=111111111.apps.googleusercontent.com&client_secret=secretSECTRETsecretSECRET&refresh_token=1%2FveryLONGtokenSTRINGhafbuaADDFR&grant_type=refresh_token 
    [userAgent:protected] => Google Calendar PHP Starter Application google-api-php-client/0.6.0 
    [responseHttpCode:protected] => 400 
    [responseHeaders:protected] => Array 
     (
      [content-type] => application/json; charset=utf-8 
      [cache-control] => no-cache, no-store, max-age=0, must-revalidate 
      [pragma] => no-cache 
      [expires] => Mon, 01 Jan 1990 00:00:00 GMT 
      [date] => Thu, 10 Nov 2016 01:05:15 GMT 
      [x-content-type-options] => nosniff 
      [x-frame-options] => SAMEORIGIN 
      [x-xss-protection] => 1; mode=block 
      [server] => GSE 
      [alt-svc] => quic=":443"; ma=2592000; v="36,35,34" 
      [accept-ranges] => none 
      [vary] => Accept-Encoding 
      [transfer-encoding] => chunked 
     ) 

    [responseBody:protected] => { 
    "error" : "invalid_grant" 
} 
    [accessKey] => 
) 

是的,我們使用的是舊版本,沒有任何新的東西。是的,帳戶是活的,我們試圖插入的日曆已存在。沒有權限或密碼被更改/重置。我們嘗試了所有的日曆 - 完全沒有成功。我也嘗試了一些小的改動/黑客,我發現這裏好像沒有使用開發者密鑰,設置訪問類型爲脫機,同步服務器時間等等...

其實我們什麼也沒做整個事情就壞了之前。所以有一個問題:Google是否改變了行爲/代碼或其他內容?或者我們錯過了某些東西(比如已棄用/已刪除的功能)?

編輯#1

我的一個學院做了改變,其實東西。 (更多關於編輯部分末尾的內容)

所以我們有一個'主'谷歌帳戶,機智開發人員密鑰和clientid和一切 - >和此帳戶也有1個日曆。

比我們的同事還有其他多個Google帳戶。我們從主日曆到日曆授予資金,反之亦然。在我們的CMS中,我們嘗試將一個事件(因此插入Google_CalendarService)添加到其中一個同事日曆中。

所以我們的一個同事辭職了,我的大學換了HIS密碼。並刪除了贈款。那麼它發生在週一16:00和週二早上我們得到了第一個錯誤。這一個Google帳戶的變化會影響所有其他人的行爲嗎?主日曆帳戶的行爲?

- 的編輯#結束1

如果有誰遇到過類似這樣的東西,並設法解決,請給一些建議。謝謝!

+0

您是否使用其中一個Gmail範圍?用戶最近更改密碼的任何機會? 「Google改變了行爲/代碼或其他內容?」我不確定,但在過去幾周裏我看到了很多這樣的問題。我有一個谷歌聯繫人檢查它。 – DaImTo

+0

嗨@DaImTo,謝謝你的評論。我們沒有明確定義任何範圍,我將編輯描述以給您更多關於使用情況的信息。從你的谷歌傢伙的反饋將是非常好的。歡呼聲 – solotherm

+0

讓我更清楚。在對用戶進行身份驗證時,您至少必須要求Google日曆範圍。您是否請求任何其他權限? – DaImTo

回答

0

大家好消息(誰在乎)!

無盡的挖掘和嘗試&失敗後,我發現谷歌實際上已經阻止了我們的舊訪問令牌。也許這是密碼更改和授權從我們這邊轉移,也許這是前同事試圖撤銷或重置某些東西,不確定。但令牌不再活躍。

用的oauth2遊樂場一些小challanges我已經建立了與我們的API憑證的連接後,並得到了新的連接偏好(新的訪問令牌和新的刷新令牌)

特別感謝和一個大的喊出來to @DaImTo指出,這可能是非活動/舊的令牌是什麼造成這個問題。

@Google:請添加有意義的錯誤消息和錯誤說明,將會花費幾分鐘到幾小時的時間來解決「小問題」,但像這樣的關鍵問題需要2-3天!

我希望這篇文章能在未來幫助別人。和平!

1

2016年11月17日更新:

我們確實發現,導致一些記號被清除的問題。我們正在努力確保它不會再發生。不幸的是,沒有辦法恢復被刪除的令牌,你的用戶將不得不再次重新授權。


我們(谷歌身份隊)正在調查該問題,因爲其他一些開發商已經聯繫我們。爲了加快調試速度, 可以通過我的G +配置文件將IM加入,這樣我可以獲得一些信息並進行調查。

「Google是否改變了行爲/代碼或其他內容?」答案是否定的,沒有任何有意的改變。

+0

根據我對這個問題的追蹤,它不是全部,而是一個隨機子集。大部分時間,至少兩週前使用過的刷新令牌突然不能正常工作。我還沒有能夠重新創建它。瘋狂的猜測可能與最近的時間變化有關嗎?雖然前幾年它從未成爲問題。 – DaImTo

+0

@nvnagr我向你發送了環聊邀請,不確定這是你想要的。不要老實說,如果它是一個令牌礦石更多。我有一個賬戶(主賬戶)集成到我們的系統中,並嘗試將事件插入其他日曆 - >它是否比每個日曆分別有1個令牌或1個令牌?但他們都沒有工作 - >甚至不能將事件插入主帳戶的日曆中。 (我的意思是同一個帳戶的日曆,其中我正在做新的Google_Client()實例) – solotherm

+0

Elzo,同意這不是傳統的「好」的答案,但這可以讓甚至其他開發人員看到與類似問題的這個問題聯繫我。這個問題的另一個答案是不準確的。我可以說,我的團隊在Google上運行OAuth服務。一旦我們調查問題,我會編輯這個答案。 – nvnagr

0

我的舊應用程序出現同樣的問題。通過重新生成客戶機密鑰和開發人員密鑰以保證安全,應用程序再次運行,您嘗試的任何其他操作都將失敗。可悲的是早上浪費了。