Доступ к Google Sheet с ограниченными правами через API - PullRequest
0 голосов
/ 17 октября 2018

Я пишу скрипт на Python 3.7, который должен считывать данные из электронной таблицы Google.

Данная электронная таблица принадлежит организации, частью которой является моя учетная запись Google: давайте просто назовем ее «Организация»,Разрешения электронной таблицы установлены как «Любой в Организации со ссылкой может просматривать».Из-за этой детали мое приложение не работало.

Я прошел на панель учетных данных по адресу https://console.cloud.google.com/apis/credentials, проходя аутентификацию с моей учетной записью в организации, и создал ключ учетной записи службы.Разрешено широкое делегирование в домене, согласно При использовании нового проекта Google API Console, получившего unauthorized_client, Клиент не авторизован для получения токенов доступа с помощью этого метода .Я скачал ключевой файл JSON в /path/to/service_account_key.json.

Ниже я документирую свою попытку с клиентской библиотекой gspread - https://github.com/burnash/gspread - однако у меня была точно такая же проблема при использовании google-api-python-client 1.7.4:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scopes = ['https://www.googleapis.com/auth/spreadsheets.readonly']
credentials = ServiceAccountCredentials.from_json_keyfile_name('/path/to/service_account_key.json', scopes)
gc = gspread.authorize(credentials)
# spreadhseet ID below obfuscated, it's actually the one you get from its URL
sheet = gc.open_by_key('12345-abcdef')

В ответе gspread используется тот же HTTP-код и сообщение, что и в обычном API Google v4:

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

Однако , если я изменяю разрешения в электронной таблице(что мне не разрешено делать на фактическом): «Любой, у кого есть ссылка, может просматривать», удаляя «Организацию», все работает!

<Spreadsheet 'Your spreadsheet' id:12345-abcdef>

Я предположил, что учетная запись службыЯ создал, не унаследовал от меня членство в организации. Однако я не нашел возможности для этого. Я даже попросил администратора домена создать служебную учетную запись для меня из его учетных записей администратора (также с делегированием по всему домену): ничего.

На Учетной записи службы Google и разрешениях для листов было сказано , что я должен явным образом предоставить этот лист электронному адресу службы поддержки.ЕНТ.Когда я это сделал, это сработало, но я также получил предупреждение о том, что учетная запись не находится в домене организации G Suite (опять же, как это не может быть?).

Большое спасибо

...