Google Drive API通过服务帐户 - access_denied在一个域上,其他呼叫/域正常工作

时间:2014-09-24 16:19:22

标签: google-drive-api google-oauth google-api-php-client

我有一套WordPress插件,使用最新的Google PHP客户端库用PHP编写。

他们使用服务帐户获取云端硬盘文件列表,并(单独)通过管理SDK为用户提供Google网上论坛列表。

我的所有客户都会在Google Cloud Console中设置项目,创建服务帐户以及为相关范围设置域范围授权(https //www.googleapis.com/auth/drive和https //www.googleapis.com/auth/admin.directory.group.readonly)。他们还输入管理员用户的电子邮件地址,以便在API调用中充当“子”。

对于大多数客户来说,一切正常。

但是对于几个客户,我们在Drive API调用中遇到了“access_denied”问题 - Google支持甚至已经验证了域范围的授权似乎都已正确设置,并建议在此处发布。

使用PHP客户端库(1.0.5-beta),我们使用服务帐户进行两次调用。

第一个电话有效:

$serviceclient = new Google_Client();
$groupservice = new Google_Service_Directory($serviceclient);
$groupservice->groups->listGroups(Array('userKey' => '<long google numeric id for any user>', 'pageToken' => ''));

这相当于GET / admin /目录/ v1 / groups?userKey =&amp; pageToken =

我们看到了良好的结果 - 用户群组的JSON列表。

但是,当我们尝试通过服务帐户调用Drive API时,我们似乎没有获得授权:

$serviceclient = new Google_Client();
$params = array('q' => "mimeType = 'application/vnd.google-apps.folder' and 'root' in parents and trashed = false");
$driveservice = new Google_Service_Drive($serviceclient);
$obj = $driveservice->files->listFiles($params);

相当于GET /drive/v2/files?q=%27root%27+in+parents+and+trashed+%3D+false+and+mimeType+%3D+%27application%2Fvnd.google-apps.folder%27 < / p>

在这种情况下,当PHP客户端库尝试刷新OAuth令牌时,我们会看到403禁止响应: {   “错误”:“access_denied”,   “error_description”:“请求的客户端未经授权。” }

错误明显发生在代码刷新阶段POST到accounts.google.com / o / oauth2 / token

我们的Curl调试显示Admin API范围的返回方式如下: {   “access_token”:“”,   “token_type”:“持票人”,   “expires_in”:3600 }

对于Drive API,我们得到: {   “错误”:“access_denied”,   “error_description”:“请求的客户端未经授权。” }

是否有其他人对此类服务帐户上的Drive API存在任何已知问题?

0 个答案:

没有答案