如何从 google 驱动器 api 的另一个用户那里获取未共享文件的元数据?

How to get metadata of an unshared file from another user with google drive api?

我目前正在使用来自 Google 报告 API 开发 C# asp.net mvc 网络应用程序Admin SDK 在我的 Google 驱动器发生问题时接收通知。

然后,我还需要使用 Drive REST API GET Request 通过使用 doc_id 报告 API.


一切正常,除了报告 API 通知我另一个用户未共享文件。驱动器 REST API 正在尝试查找文件但未成功。

这是返回的错误 404:

Google.Apis.Requests.RequestError
File not found: 0B48ytfDI5h8qY2k4VzdjMkZRNXM [404]
Errors [
    Message[File not found: 0B48ytfDI5h8qY2k4VzdjMkZRNXM] Location[file - other] Reason[notFound] Domain[global]
] 

我正在使用这个范围:DriveService.Scope.Drive

文件所有者可以使用 this form 查看其文件的元数据,但我仍然遇到错误 404。

我是驱动器管理员,在我的 Google 应用程序管理设置中,我尝试了不同的配置但没有成功,即使在域中的每个人上使用默认共享 Link 也是如此。


所以我的问题是:当您不是文件所有者且文件未共享时,是否有可能获取文件元数据?

PS: 我正在使用与我的工作领域相关的 Google 无限工作应用程序,所以我认为我至少可以得到元数据文件作为管理员,即使文件未共享。

据我所知,访问 Drive API 中用户文件的唯一方法是为您的 Web 应用程序设置服务帐户。您可以在 Domain-Wide Delegation.

下的驱动器 API 文档中阅读更多相关信息

简单总结一下:

服务帐户是属于您的应用程序而不是单个最终用户的帐户。这允许您的应用程序有权以您域中的用户身份进行 API 调用(也可以对 "impersonate" 用户)。

要开始,必须执行以下任务:

  1. 在 Google 开发人员控制台中创建或 select 项目并启用 API(例如驱动器 API)。
  2. 转到凭据,添加新凭据和 select 服务帐户。更多详情 here.
  3. 这将创建三个项目(客户端 ID、私钥文件和电子邮件地址),这是在 Google Apps 域的 Admin Console 中授权您的应用程序所必需的。

现在,您创建的服务帐户需要被授予访问您想要访问的 Google Apps 域的用户数据的权限。这将需要管理员在管理控制台中授权服务帐户。由于它已在文档中提供,您可以访问 document 中的适当步骤。

现在,您的应用程序可以代表您的 Google Apps 域的用户实例化授权的云端硬盘服务对象(即 metadata)。希望这对您有所帮助,祝您好运!