使用服务帐户进行身份验证时遇到问题:
putenv('GOOGLE_APPLICATION_CREDENTIALS='/path/to/google.json');
$client = new \Google_Client();
$client->addScope(\Google_Service_Drive::DRIVE);
$client->useApplicationDefaultCredentials();
$client->setAccessType('offline');
$client->setSubject('xxx@xxx.com');
但它显示如下错误:
{
"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method."
}
当我删除
$client->setSubject('xxx@xxx.com');
它有效(我有访问权限),但还有其他问题,我无法在google驱动器中看到通过应用程序创建的任何文件(使用UI)。从我听到它只是因为我使用服务帐户,它在自己的空间创建文件,我只能通过API访问。我也需要访问来自API和谷歌驱动器应用程序的文件。
此外,我需要访问我的谷歌硬盘而无需登录我的谷歌帐户(无需将用户重定向到谷歌登录页面)。
如果你可以帮我解决这个问题并展示一些例子,我将非常感激。
答案 0 :(得分:1)
您需要记住服务帐户不是您。服务帐户是虚拟用户,它拥有自己的Google云端硬盘帐户。在您上传之前,服务帐户google云端硬盘帐户中不会有任何文件。
答案 1 :(得分:0)
服务帐户用于代表用户行事。您可以将用户设置为您的帐户。这样,服务帐户代表您行事,您可以看到通过您的应用程序创建的所有内容(使用UI)。
为避免您遇到的错误,请确保完成以下操作:
创建服务帐户后,您需要使用G-suite授予该帐户权限。
复制 client_id 。您可以在json文件(服务帐户凭据文件)或使用Api控制台中找到它,方法是转到凭据>然后管理服务帐户“查看客户ID”#39;将 client_id 复制到剪贴板
启动G-Suite管理控制台
在客户名称字段中粘贴 client_id ,添加以下API范围,然后点击授权:
https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/calendar.readonly, https://www.googleapis.com/auth/drive
注意:如果没有执行第3步,您将收到错误
参考文献: https://support.google.com/a/answer/7378726?hl=en https://github.com/sazaamout/gDrive