我正在按照此示例操作,以使我的PHP应用程序与Google Cloud API之间能够进行服务器到服务器的访问, https://developers.google.com/api-client-library/php/auth/service-accounts。特别是,我需要访问Drive API。
尽管运行该应用程序时出现以下错误:
Google_Service_Exception : {
"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested."
}
这就是我所做的:
我错过了一步吗?
这是我的代码:
putenv('GOOGLE_APPLICATION_CREDENTIALS=my_storage/secure/my-app-service-account.json');
$client = new \Google_Client();
$client->setScopes(\Google_Service_Drive::DRIVE_METADATA_READONLY);
$client->useApplicationDefaultCredentials();
$client->setSubject('my_email@my_domain.com');
$drive = new \Google_Service_Drive($client);
echo $drive->about->get();
该示例不包括setScopes()
调用,但是没有它,我遇到了与范围相关的错误。 (该示例不是基于Drive API,因此在这种情况下可能不是必需的?)
更新:在GCP的IAM设置中,我添加了作为项目所有者的服务帐户的电子邮件地址,但这没什么区别。
答案 0 :(得分:0)
我发现了问题。
在上面的setScopes()
调用中,传递的值必须与在G Suite中设置客户端时给出的值相同,在这种情况下为https://www.googleapis.com/auth/drive