如何使用服务帐户访问 Google Doc Api?
Posted
技术标签:
【中文标题】如何使用服务帐户访问 Google Doc Api?【英文标题】:How to access Google Doc Api with service account? 【发布时间】:2020-04-13 13:53:44 【问题描述】:我希望我的网络服务器通过服务帐户请求 google doc。我选择服务帐户的原因是我不希望用户提供任何登录信息。
尝试了下面的代码,但这会引发 The caller does not have permission
错误。
SCOPES = ['https://www.googleapis.com/auth/documents']
SERVICE_ACCOUNT_FILE = 'xxx.json'
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
service = googleapiclient.discovery.build('docs', 'v1', credentials=credentials)
response = service.documents().get(documentId='xxx').execute()
【问题讨论】:
【参考方案1】:如果您不想冒充用户,则必须与驱动器中的服务帐户共享文档,以便授予其读/写权限
【讨论】:
【参考方案2】:答案:
您需要确保服务帐户对其尝试读/写的文件具有访问权限。
更多信息:
The caller does not have permission
错误消息表明 ID 为 documentID
的文件具有共享权限,因此您使用的服务帐户无权执行您要求它执行的操作 - 无论是读取还是写入。
如果您确实无法模拟用户,则需要通过以下共享选项之一访问该文件:
如果服务帐户与拥有文件的用户位于不同的域中:
开启 - 在网络上公开 开启 - 知道链接的任何人如果服务帐号与用户在同一个域中:
开启 - 您单位中的任何人都可以找到和访问 开启 - 组织中知道链接的任何人或者,您可以通过选择Off - Specific people
并在文件本身的共享对话框的People
字段中输入服务帐户的电子邮件地址,直接与服务帐户共享。服务帐户的电子邮件地址可以在与其关联的 GCP 项目中找到 - 在 console.developers.google.com
参考资料:
GCP Developers Console Google Drive Help - Share files from Google Drive【讨论】:
【参考方案3】:关于创建服务帐户和阅读 Google 文档https://www.futurice.com/blog/read-goog-doc-using-service-account的说明
文档需要与服务帐户的电子邮件地址共享或公开共享。
【讨论】:
以上是关于如何使用服务帐户访问 Google Doc Api?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Google Drive .NET API v3 使用服务帐户访问 Team Drive
无法访问通过 Google 电子表格 API 通过服务帐户创建的工作表