【问题标题】:Drive API access to document with service account使用服务帐户驱动 API 访问文档
【发布时间】:2015-03-30 06:39:43
【问题描述】:

我正在尝试通过服务帐户使用 Google Drive Java API 访问“google.com”域下的电子表格。我需要导出文档中包含的几个工作表。

我已经能够创建和使用服务帐户(通过 Java API 使用),但不确定如何进行访问,或者我正在尝试做的事情是否可行。我看到了以下页面:https://developers.google.com/drive/web/delegation,但我正在使用的服务帐户似乎极不可能被授予访问 google.com 公司域的权限。我们在 Google 的帐户联系人建议我们查看论坛以获取一些建议。

鉴于此,我有几个关于方法的问题:

  • 我是否误解了访问要求?更具体地说,有没有一种方法可以授予服务帐户对特定文档的访问权限?
  • 此任务(工作表导出)是否更适合电子表格 API?该 API 似乎专注于在电子表格中操作,而驱动 API 似乎处理文件/文档管理。
  • 是否需要将文档副本复制到其他域?

我的猜测是我们需要复制文档,但我想确定一下,并确保我理解 API 并正确访问。

谢谢!

【问题讨论】:

  • 一些澄清,以便我可以了解您想要实现的目标...您为什么使用服务帐户?你要导出成什么格式?当您说“其中包含的几个工作表”时,这有点导致电子表格 API,正如您所说,它是在文档中运行的 API。
  • 我正在使用服务帐户,因为我们有一个软件服务正在运行,它需要在没有任何人工干预的情况下按计划检索电子表格。
  • 您最好使用普通帐户而不是服务帐户。请参阅stackoverflow.com/questions/19766912/… 了解如何执行此操作。至于“电子表格api更好”,这完全取决于您想要做什么。您是否愿意下载整个文件(Drive API),还是希望能够访问文件的各个区域(Spreadsheet API)?
  • 感谢您对电子表格/驱动器的参考和澄清。根据您所说,我的用例适合 Drive API,因为我们不需要抓取文件的区域。我想我坚持使用服务帐户——我们没有用于常规访问的永久用户帐户,并且我们不想处理可能的令牌过期问题。常规帐户方法有效,但基于链接的线程,感觉更像是使用服务帐户的解决方法。

标签: google-drive-api google-api-java-client


【解决方案1】:

您还必须在要访问的驱动器文件中授予服务帐户。只需 Share 使用 Google Developers Console 中显示的 EMAIL ADDRESS 访问您想要访问的文档(例如 XXXXX@developer.gserviceaccount.com

【讨论】:

  • 谢谢!赞成,因为它对于看到此 Q 的其他人来说是有用的信息。我在接受解决方案并进行更多实验后发现了这一点,我(也许是愚蠢的)没有意识到您可以直接与服务帐户共享。它让生活更轻松。
  • @jalogar 我刚刚做了,但我无法从我的服务帐户中看到共享文件夹
【解决方案2】:

您有权访问该文件吗?尝试使用方法 files.get https://developers.google.com/drive/v2/reference/files/get 如果收到 200 响应则您可以访问,尝试找到参数 exportlinks 通过这些链接,您可以将文件导出为不同的格式。 否则你将无法做到。

  • 只有被授予文件访问权限的人才能访问它。如果服务帐户具有域管理员批准的委派,则服务帐户可以模拟该域中的人。如果它模拟的用户无权访问某个文件,则服务帐户也无权访问。

  • 使用 Drive API 导出文件更好,正如您提到的,电子表格 API 用于管理电子表格的内容。

  • 如果你想修改信息而不修改原始文件,那么可以。

希望这会有所帮助。

【讨论】:

  • 谢谢!我无权访问该文件。无法通过 ID 检索,尝试直接获取文件会导致 403 Forbidden。如果需要管理员批准的委派,我似乎需要将文件迁移到其他域。
  • 接受这个答案,因为它帮助我确认我没有访问权限,确认服务帐户的访问权限是如何工作的,并且我现在有了在不同域下处理文档副本的路径。
猜你喜欢
  • 2014-06-22
  • 2022-01-15
  • 2014-02-01
  • 2018-10-06
  • 2013-08-30
  • 2014-02-21
  • 2013-04-07
  • 2020-05-13
  • 2020-07-08
相关资源
最近更新 更多