Пример PHP-сервера Google OAuth2 не работает - PullRequest
0 голосов
/ 24 марта 2019

Я следую этому примеру, чтобы получить межсерверный доступ, работающий между моим 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 я добавил адрес электронной почты учетной записи службы в качестве владельца проекта, но это не имело значения.

1 Ответ

0 голосов
/ 24 марта 2019

Я обнаружил проблему.

В приведенном выше вызове setScopes() передаваемое значение должно совпадать со значением, указанным при настройке клиента в G Suite, в данном случае https://www.googleapis.com/auth/drive

...