我已经在PHP中创建了一个服务器端应用程序,它应该与Google Spreadsheets一起使用。
我可以使用OAuth 2.0身份验证成功进行身份验证,但在从Google请求电子表格列表时,我只会获得电子表格所有者与服务帐户共享的电子表格。
服务帐户是否可以检索我的主帐户拥有的所有电子表格而不是服务帐户,包括那些未明确与服务帐户共享的电子表格?
此外,我仍然希望将电子表格保密,以便未经我的许可,任何人都无法访问它们,但我需要服务帐户才能完全访问现有和新的电子表格。
感谢任何建议。
答案 0 :(得分:7)
以下是使用服务帐户阅读Google电子表格工作表内容的示例脚本。有关设置它的说明,请查看README:
答案 1 :(得分:2)
你必须改变做法:
在云端硬盘中创建服务帐户。您只能通过API管理和使用此帐户(通常不使用Web界面)
使用Drive API,您可以列出,创建,更新,删除和更改文件的权限。当您创建新文件时,您可以将它 - 始终使用API - 分享给您想要的用户,公开新文件或更改所有权。
请看一下:https://developers.google.com/drive/v2/reference/permissions
答案 2 :(得分:0)
我假设您使用的是Google Apps而非个人GMail帐户。您可以使用自己的服务帐户模仿主帐户。
请注意,我在这里谈论的是Google所说的服务帐户:私钥(p12格式)和标识符。这不是用于技术目的的Google Apps帐户。 More information here
这是通过以下方式完成的:
Spreadsheet API和Drive API的步骤完全相同。
要首先授权您的服务帐户模拟域用户,您可以关注this documentation。以下是基本步骤。您必须是域超级管理员才能执行此任务。
完成此操作后,您需要更新代码,以便模拟您的主帐户:
$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
错误。如果您的客户端没有自动处理此问题,您将需要捕获错误并重新生成令牌。