如何在不使用谷歌应用程序的情况下授权谷歌硬盘服务帐户访问谷歌帐户?

Chr*_*son 7 php google-drive-api google-api-php-client

我想使用Google云端硬盘作为我正在制作的网站的准CMS,以便内容所有者可以使用Google云端硬盘修改其内容.我想使用可以访问Google云端硬盘的特定用户帐户(撰写此帖子时,服务帐户无法直接访问Google云端硬盘),并且能够与内容所有者共享文档.

阅读完API和教程后,我在代表团中找到了答案:https://developers.google.com/drive/delegation

我在此过程中遇到的主要问题是该网站不受Google Apps管理,因此"将您的服务帐户的域名授权权限委托"中列出的步骤让我感到困惑 - 似乎应该可以在不使用Google的情况下处理此授权应用,但在搜索了我的特定用户帐户的Google云端硬盘设置后,我似乎无法找到授权模拟的功能.

我正在使用的代码片段:

static public function getService() {
  $key = file_get_contents(GOOGLEAPI_KEYFILE);
  $auth = new Google_AssertionCredentials(GOOGLEAPI_SERVICE_EMAIL, array(GOOGLEAPI_SCOPE), $key);
  $auth->setPrn(GOOGLEAPI_IMPERSONATION);
  self::$apiClient = new Google_Client();
  self::$apiClient->setUseObjects(true);
  self::$apiClient->setAssertionCredentials($auth);
  return new Google_DriveService(self::$apiClient);
}
Run Code Online (Sandbox Code Playgroud)

GOOGLEAPI_IMPERSONATION 是特定的用户帐户,当我运行此代码时,异常指出:

刷新OAuth2令牌时出错,消息:'{"error":"access_denied"}

有人提供任何帮助吗?我是否误解了oAuth如何在授权方面发挥作用的基本概念?

Ste*_*zyl 5

服务帐户适用于两种不同的情况:

  • 授权应用程序/进程使用自己的标识对服务进行身份验证和调用.考虑预测,云存储等服务,其中数据由应用拥有.
  • 冒充谷歌应用域中的用户,域管理员可以预先授权应用代表其域中的用户行事.

模拟适用于Google Apps域,因为管理员有一种机制可以通过控制面板为其用户带外授权应用.当然,他们只能授权应用访问他们管理的帐户的数据.对于不属于组织的个人用户,应用需要使用常规OAuth流来请求每个用户的授权.

我有一段时间没有测试过,但最后我检查过可以使用Drive作为自己的服务帐户.我遇到的唯一限制是无法购买额外的配额,应用仅限于最初的5GB免费存储空间.

  • 更正服务帐户无权访问Web UI.如果这是一个要求,你有几个选择.首先是与需要能够访问它们的用户共享文档.所需要的只是了解他们的电子邮件地址.或者,您可以转到其他方向并在其他帐户中创建文档,然后与服务帐户共享.最后,如果只有一个帐户需要访问权限,请使用具有脱机访问权限的普通oauth进行授权,并让应用程序代表该用户执行操作. (4认同)