使用 API Google 个云端硬盘文件和服务帐户的所有权

Ownership of Google Drive files and Service Account using API

在 Developers Console 中为特定应用用户创建的服务帐户(例如 user@mydomain.com)是否可以访问该应用用户的文档?如果我像这样在 AssertionCredentials() 中设置帐户:

$credentials = new Google_Auth_AssertionCredentials(...);
$credentials->sub = "user@mydomain.com";

我收到以下错误:

PHP Fatal error:
Uncaught exception 'Google_Auth_Exception' with message
'Error refreshing the OAuth2 token, message:'{
  "error" : "unauthorized_client",
  "error_description" : "Unauthorized client or scope in request."
}

当我不设置 $credentials->sub = "user@mydomain.com" 时,我可以访问驱动器,但我只看到一个文档“如何开始使用驱动器”。

如果我在服务帐户上创建文档,是否可以在不启用全域授权的情况下将文档的所有权转移到我的应用程序帐户?

在开发者控制台中为特定应用用户(例如 user@mydomain.com)创建的服务帐户是否可以访问该应用用户的文档?

没有

我可以访问驱动器,但我只能看到一个文件 "How to get started with Drive"。

你期待什么?您已经创建了一个新帐户,因此它有一个欢迎文件。

如果我在服务帐户上创建文档,是否可以在不启用全域授权的情况下将文档的所有权转移到我的应用程序帐户?

您确定您了解什么是服务帐户吗?如果您想要帐户中的文件,请为您的帐户使用令牌并停止使用中间服务帐户。

当涉及到 Drive REST API 时,服务帐户本质上是他们自己的帐户,但是这种行为似乎与服务帐户可以冒充所有者的 Google 日历 API 不一致帐户 没有 全域授权。如果您与 Developers Console 中提供的服务帐户电子邮件地址共享任何文档,该服务帐户就可以访问该文档,但是无法转移所有权,因为这两个帐户不在同一域中。