Как я могу опубликовать 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), принципы должны быть так же.