【问题标题】:How to access Google Doc Api with service account?如何使用服务帐户访问 Google Doc Api?
【发布时间】: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()

【问题讨论】:

    标签: google-api google-docs google-api-client google-api-python-client


    【解决方案1】:

    如果您不想冒充用户,则必须与驱动器中的服务帐户共享文档,以便授予其读/写权限

    【讨论】:

      【解决方案2】:

      答案:

      您需要确保服务帐户对其尝试读/写的文件具有访问权限。

      更多信息:

      The caller does not have permission 错误消息表明 ID 为 documentID 的文件具有共享权限,因此您使用的服务帐户无权执行您要求它执行的操作 - 无论是读取还是写入。

      如果您确实无法模拟用户,则需要通过以下共享选项之一访问该文件:

      如果服务帐户与拥有文件的用户位于不同的域中:

      • 开启 - 在网络上公开
      • 开启 - 知道链接的任何人

      如果服务帐号与用户在同一个域中:

      • 开启 - 您单位中的任何人都可以找到和访问
      • 开启 - 组织中知道链接的任何人

      或者,您可以通过选择Off - Specific people 并在文件本身的共享对话框的People 字段中输入服务帐户的电子邮件地址,直接与服务帐户共享。服务帐户的电子邮件地址可以在与其关联的 GCP 项目中找到 - 在 console.developers.google.com

      参考资料:

      【讨论】:

        【解决方案3】:

        关于创建服务帐户和阅读 Google 文档https://www.futurice.com/blog/read-goog-doc-using-service-account的说明

        文档需要与服务帐户的电子邮件地址共享或公开共享。

        【讨论】:

          猜你喜欢
          • 2014-02-01
          • 2018-10-06
          • 2013-08-30
          • 1970-01-01
          • 2015-12-17
          • 2017-06-26
          • 2020-01-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多