Правильная настройка доступа к GSheet, опубликованному в виде веб-приложения через учетную запись службы - PullRequest
1 голос
/ 10 февраля 2020

У меня есть GSheet, опубликованный как веб-приложение, и я пытаюсь разрешить доступ к нему из служебной учетной записи

  • Он настроен для разрешения доступа любому.
  • Я могу получить к нему доступ, когда напрямую нажму URL развернутого приложения.
  • Я преобразовал проект в стандартный проект GCP.
  • Я создал учетную запись службы, прикрепленную к проекту.
  • Учетная запись службы имеет доступ к редактору.
  • Затем я также предоставил доступ к листу учетной записи службы.

Попытка доступа к нему с помощью следующей python код и получение 401. Следующие примеры здесь

from __future__ import print_function
from google.oauth2 import service_account
from google.auth.transport.urllib3 import AuthorizedHttp

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
credentials = service_account.Credentials.from_service_account_file(
'service_account.json', scopes=SCOPES)


def main():
    try:
        authed_http = AuthorizedHttp(credentials)

        response = authed_http.request(
           'GET',   'https://script.google.com/a/<DOMAIN_NAME_REDACTED>/macros/s/AKfycbwv53GaXRCvjQMYizjqI4PsLeNMAcmCtHjRhZE9AlheIp0qE_s/exec')
    print(response)
except BaseException as err_base2:
    print(err_base2)

if __name__ == '__main__':
    main()

Я думаю, что мне не хватает чего-то очевидного. Есть идеи?

1 Ответ

1 голос
/ 10 февраля 2020
  • Вы хотите получить доступ к веб-приложениям, которые были развернуты как Execute the app as: Me и Who has access to the app: Anyone с использованием request из python.
  • Проект сценария Google Apps, в котором развертывается веб-приложения, уже предоставлен с учетной записью службы.

Если мое понимание верно, как насчет этой модификации? В этом случае измените область следующим образом.

С:

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

К:

SCOPES = ['https://www.googleapis.com/auth/drive']

и / или

SCOPES = ['https://www.googleapis.com/auth/drive.readonly']
  • Даже когда ваш сценарий веб-приложений использует методы Spreadsheet, кажется, что требуется область действия Drive API.

Примечание:

  • В этом В этом случае вы можете получить возвращенные значения из веб-приложений с помощью print(response._body) в своем скрипте.

Если это не тот результат, который вам нужен, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...