Как я могу опубликовать Google App Script, используя учетную запись службы делегирования всего домена? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь использовать то, что Google называет учетной записью службы «Общедоменное делегирование»: https://developers.google.com/admin-sdk/directory/v1/guides/delegation

Конкретный API, к которому я пытаюсь получить доступ с помощью этого делегирования: https://developers.google.com/apps-script/api/

Вот код:

from google.oauth2 import service_account
import googleapiclient.discovery
import json
import os

SCOPES = ['https://www.googleapis.com/auth/script.projects', 'https://www.googleapis.com/auth/drive']
SERVICE_KEY = json.loads(os.environ['SERVICE_KEY'])

credentials = service_account.Credentials.from_service_account_info(SERVICE_KEY, scopes=SCOPES)
delegated_credentials = credentials.with_subject('fred.bloggs@my-gapps-domain.com')
script = googleapiclient.discovery.build('script', 'v1', credentials=delegated_credentials)

response = script.projects().get(scriptId='<myscriptId>').execute()
print json.dumps(response)

Это не с:

google.auth.exceptions.RefreshError: ('unauthorized_client: Client is unauthorized to retrieve access tokens using this method.', u'{\n  "error" : "unauthorized_client",\n  "error_description" : "Client is unauthorized to retrieve access tokens using this method."\n}')

Я почти уверен, что выполнил все шаги в https://developers.google.com/api-client-library/python/auth/service-accounts,, включая авторизацию области действия https://www.googleapis.com/auth/script.projects' с идентификатором клиента для загруженной мной учетной записи json-ключа службы.

enter image description here

Обратите внимание, я смог успешно заставить этот конкретный фрагмент работать, пропустив with_subject, и, войдя на панель инструментов Script, как пользователь, и "поделился" проектом сценария.

К сожалению, это по-прежнему не позволяет загружать новый набор файлов (так как «общий доступ» не дает возможности удалить). Это по крайней мере подтверждает, что мой вызывающий код правильный, хотя и не проходит аутентификацию с помощью служебного ключа json.

уточнить:

  • Рассматриваемый сценарий называется «автономным» (не веб-приложением).
  • Он принадлежит пользователю бота, который я настроил так же, как обычный пользователь GSuite (так как я не хотел, чтобы скрипты в Google Drive обычного пользователя)
  • Сценарий запустился в облачном проекте Google, который, казалось, был создан автоматически с надписью «Нет организации». Затем я вручную создал новый проект в организации и перенес сценарий в этот проект.

Сейчас есть официальный клиент Google Apps Script, поэтому я тоже спросил его https://github.com/google/clasp/issues/225#issuecomment-400174500 - хотя они используют Javascript API (через Typescript), принципы должны быть одинаковыми.

...