API Google Таблиц возвращает "У вызывающего абонента нет разрешения" при использовании ключа сервера

Я создал ключ сервера в диспетчере API и попытался выполнить следующее на моем Mac:

curl 'https://sheets.googleapis.com/v4/spreadsheets/MySheetID?ranges=A1:B5&key=TheServerKeyIGeneratedInAPIManager'

Но это то, что он возвращает:

{
 "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

Что я здесь делаю неправильно?

Ответ 1

Чтобы решить эту проблему, попробуйте:

  1. создать учетную запись службы: https://console.developers.google.com/iam-admin/serviceaccounts/
  2. в настройках создайте ключ: этот ключ ваш обычный client_secret.json - используйте его так же, как
  3. добавить разрешение владельца для этой учетной записи службы (имя участника = идентификатор учетной записи службы = электронная почта учетной записи службы, например: [email protected]
  4. скопируйте адрес электронной почты вашей учетной записи службы = идентификатор учетной записи службы
  5. просто перейдите в своем браузере на страницу Google, с которой вы хотите взаимодействовать
  6. перейдите к ДОЛЯ в правом верхнем углу экрана
  7. перейдите в расширенные настройки и поделитесь им с адресом электронной почты своей учетной записи службы, например: [email protected]

У меня это сработало :)

Ответ 2

Я знаю, что немного поздно ответить, но для других людей, борющихся с одной и той же проблемой.
Просто измените разрешение листа на общедоступный на вашем диске, чтобы он мог получить доступ без аутентификации через вызовы API.

Чтобы изменить доступ:

  • Открыть лист в Google Диске
  • В правом верхнем углу нажмите общий доступ
  • В нижней части окна подсказки нажмите расширенный
  • Измените разрешение на публикацию или людей со ссылкой (без необходимости входа)

Отправить запрос API для извлечения данных с листов без проверки подлинности.

Примечание:, если лист содержит важные данные, тогда небезопасно сделать его общедоступным и, скорее, сделать это с помощью аутентифицированного доступа.

Ответ 3

Обязательно обратите внимание на комментарий @KishanPatel:

Кроме того, вы можете поделиться этим листом с конкретным адресом электронной почты Ex. ваш сервис учетная запись (проект) электронная почта. "Client_email": "[email protected]", это позволит чтобы получить доступ к листу по вашему сценарию.

Ответ 4

Самый простой способ - это исправить с помощью gcloud cli. Больше документов здесь https://cloud.google.com/pubsub/docs/quickstart-cli#before-you-begin

установить gcloud

sudo apt-get install google-cloud-sdk

затем позвоните

gcloud init

затем проверьте свой активный проект и учетные данные

gcloud config configurations list

Если это не так, убедитесь, что вы прошли аутентификацию с правильным аккаунтом:

gcloud auth list
* account 1
  account 2

Перейдите в учетную запись проекта, если нет:

gcloud config set account 'ACCOUNT'

В зависимости от аккаунта список проектов будет разным:

gcloud projects list

- project 1
- project 2...

Переключиться на предполагаемый проект:

gcloud config set project 'PROJECT NAME'

Затем создайте учетные данные по умолчанию для приложения с помощью gcloud auth application-default login, а затем Google-Cloud автоматически обнаружит такие учетные данные.