2013-01-06 26 views
6

我想使用Google云端硬盘作为我正在制作的网站的准CMS,以便内容所有者可以使用Google云端硬盘编辑其内容。我希望使用可访问Google云端硬盘的特定用户帐户(因为撰写此帖子,服务帐户无法直接访问Google云端硬盘),并且能够与内容所有者共享文档。如何在不使用Google应用的情况下授权Google云端硬盘服务帐户访问Google帐户?

通过API和教程看完后,我发现在代表团的答案:https://developers.google.com/drive/delegation

我在这个过程中的主要问题是,网站不是由谷歌Apps的管理,因此在“委托域列出的步骤您的服务帐户的全权限“让我感到困惑 - 似乎应该可以在不使用Google Apps的情况下处理此授权,但在搜索完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); 
} 

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

错误刷新的OAuth2令牌,消息:'{“error”:“access_denied”}

任何人提供任何帮助?我是否误解了oAuth在授权方面的工作原理?

回答

5

服务帐户意味着两种不同的情况:

  • 授权的应用程序/过程来验证&使用其自己的身份调用服务。可以考虑预测,云存储等服务,数据由应用程序拥有。
  • 模仿谷歌应用程序域中的用户,域管理员可以预先授权应用程序代表其域中的用户执行操作。

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

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

+1

Steve,谢谢你的回应。我已成功使用服务帐户上传和阅读文档,没有任何问题。但是,无法通过需要的Google文档网页界面访问上传的文档。此外,用户特定的oAuth不起作用的原因是因为我只想将Google文档服务帐户用作包含用于填充网站内容的文档的存储分区 - 因此,如果Google用户访问该网站,他们不需要为他们的账户或任何东西做任何事。 –

+4

更正服务帐户无权访问Web UI。如果这是一个要求,你有几个选择。首先是将文档与需要能够访问它们的用户分享。只需要知道他们的电子邮件地址。或者,您可以转到其他方向,在其他帐户中创作文档,然后与服务帐户共享。最后,如果只有一个需要访问的帐户,请授权使用正常的oauth进行脱机访问,并让该应用代表该用户行事。 –

+0

谢谢史蒂夫 - 当我回到这个项目时,我会更多地关注这个 –

相关问题