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

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

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

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

Чтобы уточнить:

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

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

0 ответов

Другие вопросы по тегам