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