如何使用服务帐户凭据访问Google Spreadsheets?

时间:2014-11-21 18:23:46

标签: php list google-sheets shared

我已经在PHP中创建了一个服务器端应用程序,它应该与Google Spreadsheets一起使用。

我可以使用OAuth 2.0身份验证成功进行身份验证,但在从Google请求电子表格列表时,我只会获得电子表格所有者与服务帐户共享的电子表格。

服务帐户是否可以检索我的主帐户拥有的所有电子表格而不是服务帐户,包括那些未明确与服务帐户共享的电子表格?

此外,我仍然希望将电子表格保密,以便未经我的许可,任何人都无法访问它们,但我需要服务帐户才能完全访问现有和新的电子表格。

感谢任何建议。

3 个答案:

答案 0 :(得分:7)

以下是使用服务帐户阅读Google电子表格工作表内容的示例脚本。有关设置它的说明,请查看README:

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

答案 1 :(得分:2)

你必须改变做法:

  1. 在云端硬盘中创建服务帐户。您只能通过API管理和使用此帐户(通常不使用Web界面)

  2. 使用Drive API,您可以列出,创建,更新,删除和更改文件的权限。当您创建新文件时,您可以将它 - 始终使用API​​ - 分享给您想要的用户,公开新文件或更改所有权。

  3. 请看一下:https://developers.google.com/drive/v2/reference/permissions

答案 2 :(得分:0)

我假设您使用的是Google Apps而非个人GMail帐户。您可以使用自己的服务帐户模仿主帐户。

请注意,我在这里谈论的是Google所说的服务帐户:私钥(p12格式)和标识符。这不是用于技术目的的Google Apps帐户。 More information here

这是通过以下方式完成的:

  1. 在您的Google Apps域上授权您的服务帐户
  2. 修改用于生成API凭据的代码
  3. Spreadsheet API和Drive API的步骤完全相同。

    要首先授权您的服务帐户模拟域用户,您可以关注this documentation。以下是基本步骤。您必须是域超级管理员才能执行此任务。

    1. 转到您的Google Apps域管理控制台:https://admin.google.com
    2. 从控件列表中选择安全。如果您未看到列出的安全,请选择更多 控件从页面底部的灰色栏开始,然后选择 控件列表中的安全性
    3. 从中选择高级设置 选项列表。
    4. 选择管理第三方OAuth客户端访问身份验证部分。
    5. 客户名称字段中输入 服务帐户的客户ID。在一个或多个API范围字段中 输入应授予您的应用程序的范围列表 进入。在您的情况下,至少是电子表格API范围: https://spreadsheets.google.com/feeds
    6. 完成此操作后,您需要更新代码,以便模拟您的主帐户:

      $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错误。如果您的客户端没有自动处理此问题,您将需要捕获错误并重新生成令牌。