我有一套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存在任何已知问题?