我如何授权谷歌驱动器服务帐户访问谷歌帐户不使用谷歌应用程序


How do I authorize a google drive service account access to a google account without using google apps?

我想使用Google Drive作为我正在制作的网站的准cms,以便内容所有者可以使用Google Drive编辑其内容。我想使用一个可以访问Google Drive的特定用户帐户(在写这篇文章时,服务帐户不能直接访问Google Drive),并且能够与内容所有者共享文档。

通过阅读API和教程,我在委托中找到了答案:https://developers.google.com/drive/delegation

我对这个过程的主要问题是该网站不是由Google Apps管理的,因此在"将域范围内的权限委托给您的服务帐户"中概述的步骤使我感到困惑-似乎应该可以在不使用Google Apps的情况下处理此委托,但在Google Drive中搜索我的特定用户帐户的设置后,我似乎找不到授权模拟的能力。

我正在使用的代码片段:

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);
}

GOOGLEAPI_IMPERSONATION是特定的用户帐户,当我运行这段代码时,异常状态为:

刷新OAuth2令牌错误,消息:'{" Error ": "access_denied"}

有人愿意帮忙吗?我是否误解了oAuth在委托方面是如何工作的基本概念?

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

  • 授权应用/进程进行身份验证;使用自己的标识调用服务。想想像预测、云存储等服务,其中的数据由应用程序拥有。
  • 在google apps域中冒充用户,域管理员可以预先授权应用程序代表其域中的用户行事。

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

我有一段时间没有测试它,但最后我检查了它可以使用一个服务帐户作为自己的驱动器。我遇到的唯一限制是不可能购买额外的配额,应用程序被限制在最初的5gb免费存储空间。