簡體   English   中英

如何使用服務帳戶憑據訪問Google Spreadsheets?

[英]How to access Google Spreadsheets with a service account credentials?

我在PHP中創建了一個服務器端應用程序,它應該與Google Spreadsheets一起使用。

我可以使用OAuth 2.0身份驗證成功進行身份驗證,但在從Google請求電子表格列表時,我只會獲得電子表格所有者與服務帳戶共享的電子表格。

有沒有辦法讓服務帳戶可以檢索我的主帳戶擁有的所有電子表格而不是服務帳戶,包括那些未明確與服務帳戶共享的電子表格?

此外,我仍然希望保持電子表格的私密性,以便未經我的許可,任何人都無法訪問它們,但我需要服務帳戶才能完全訪問現有和新的電子表格。

任何建議表示贊賞。

以下是使用服務帳戶讀取Google電子表格工作表內容的示例腳本。 有關設置它的說明,請查看README:

https://github.com/juampynr/google-spreadsheet-reader

你必須改變方法:

  1. 在雲端硬盤中創建服務帳戶。 您只能使用API​​管理和使用此帳戶(通常不使用Web界面)

  2. 使用Drive API,您可以列出,創建,更新,刪除和更改文件的權限。 創建新文件時,您可以將所有文件(始終使用API​​)共享給所需的用戶,將新文件公開或更改所有權。

請查看: https//developers.google.com/drive/v2/reference/permissions

我假設您使用的是Google Apps而非個人GMail帳戶。 您可以使用自己的服務帳戶來模擬主帳戶。

請注意,我在這里談論的是Google所說的服務帳戶:私鑰(p12格式)和標識符。 這不是用於技術目的的Google Apps帳戶。 更多信息在這里

這是通過:

  1. 在您的Google Apps域上授權您的服務帳戶
  2. 修改用於生成API憑據的代碼

Spreadsheet API和Drive API的步驟完全相同。

要首先授權您的服務帳戶模擬域用戶,您可以按照此文檔操作 以下是基本步驟。 您必須是域超級管理員才能執行此任務。

  1. 轉到您的Google Apps域管理控制台: https//admin.google.com
  2. 從控件列表中選擇安全性 如果未列出“ 安全性”列表,請從頁面底部的灰色欄中選擇“ 更多控件” ,然后從控件列表中選擇“ 安全性 ”。
  3. 從選項列表中選擇高級設置
  4. 在“ 身份驗證”部分中選擇管理第三方OAuth客戶端訪問
  5. 在“ 客戶端名稱”字段中,輸入服務帳戶的客戶端ID。 在“ 一個或多個API范圍”字段中,輸入應授予應用程序訪問權限的范圍列表。 在您的情況下,至少是電子表格API范圍: https//spreadsheets.google.com/feeds

完成此操作后,您需要更新代碼,以便模擬您的主帳戶:

$key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$auth = new Google_AssertionCredentials(
      'YOUR_SERVICE_ACCOUNT_EMAIL',
      array('https://spreadsheets.google.com/feeds'),
      $key);
$auth->sub = 'yourmainaccount@domain.com';

然后,您可以使用$auth變量生成訪問電子表格API所需的OAuth令牌。 我不確定您使用哪個客戶端,因此注入訪問令牌的方式取決於您使用的客戶端。

另請注意,此令牌將在1小時后過期,然后API將開始返回Session Expired錯誤。 如果您的客戶端不自動處理此問題,您將需要捕獲錯誤並重新生成令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM