1

我有一個在GAE上運行的PHP應用程序。它使用Google PHP庫(v0.6.7)連接到雲數據存儲。這種連接在大多數情況下都能正常工作,但偶爾會出現以下錯誤,指示嘗試刷新OAuth2令牌時發生錯誤。GAE - 刷新OAuth2令牌時出錯

Error refreshing the OAuth2 token, message: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Google Accounts</title><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=0" /> 

該消息還包括在末端執行以下操作:

You are not authorized to perform this request 

我附下面的代碼用於此連接。正如您所看到的,我正在使用一個P12文件來自動連接到數據存儲服務。

$account = '[email protected]'; 

$key = file_get_contents(dirname(__FILE__).'/../google-api-php-client/privatekey.p12'); 
    $client = new Google_Client(); 
    $client->setApplicationName($this->appId); 

    $client->setAssertionCredentials(
      new Google_AssertionCredentials(
        $account, 
        array('https://www.googleapis.com/auth/userinfo.email', 
          'https://www.googleapis.com/auth/datastore'), 
        $key) 
    ); 


    $datastore = new Google_DatastoreService($client); 

的事情是,我不知道這是否是一個GAE的問題還是我可以做一些事情在我的代碼來解決這個問題,或者至少儘量減少返回該錯誤的請求數。

我看到有一個新的圖書館版本(1.0.1-beta),我們計劃遷移到這個版本。然而,在做這件事之前,對這個問題的原因有什麼想法是非常有用的。

回答

0

我回答自己,以防萬一有人發現它有用。

執行一些測試後,我意識到連接後返回的令牌沒有正確存儲。結果,系統試圖在每個請求中刷新令牌。顯然,在給定數量的請求之後,Google只是拒絕爲該用戶刷新令牌的任何新嘗試,導致我在上面顯示的錯誤。