Я следую этому примеру, чтобы получить межсерверный доступ, работающий между моим PHP-приложением и API Google Cloud, 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."
}
Вот что я сделал:
- Создан проект GCP
- Добавлена учетная запись службыпроект с делегированием по всему домену и набором ключей
- Включил API Google Drive в проекте
- В моей учетной записи G Suite в разделе «Управление доступом клиента API» я добавилИдентификатор клиента моей учетной записи службы, с разрешения https://www.googleapis.com/auth/drive
Я пропустил шаг?
Вот мой код:
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, поэтому, возможно, он не требуется в этом случае?)
ОБНОВЛЕНИЕ: в настройках IAM для GCP я добавил адрес электронной почты учетной записи службы в качестве владельца проекта, но это не имело значения.