#google-apps-script #service-accounts
Вопрос:
У меня есть базовая doGet
функция, взятая из документации Google:
function doGet(e) {
var params = JSON.stringify(e);
return HtmlService.createHtmlOutput(params);
}
Я развернул его как отдельное веб-приложение, дал ему разрешения на доступ для любого сотрудника организации и сумел успешно вызвать его из браузера, используя URL-адрес, например:
https://script.google.com/a/macros/**/s/some-guid/exec?a=b
:
{"parameters":{"a":["b"]},"contextPath":"","contentLength":-1,"queryString":"a=b","parameter":{"a":"b"}}
Однако, когда я пытаюсь вызвать его программно, используя учетную запись службы, я получаю 401
:
creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
print(creds.valid) # prints True
headers = {'content-type': 'application/json', 'Authorization': 'Bearer ' creds.token}
response = requests.get("THE_ABOVE_URL" , headers=headers)
print(response) # prints `401`
Что я делаю не так?
Комментарии:
1. Вы указали параметры при программном вызове?
2. Также: развернул ли oyu веб-приложение, запущенное вами или пользователем, получившим доступ к веб-приложению?
3. Я развернул веб-приложение, работающее так же, как и я сам.
4. В этом случае вам необходимо развернуть его как «Кто может получить доступ»: «Любой, даже анонимный» и — что очень важно: приложение, из которого вы звоните в веб-приложение, должно иметь область действия диска.
5. Нет, если вы получите к нему программный доступ. Имейте в виду, что никто, кто не знает ваш URL-адрес развертывания, не сможет развернуть ваше веб-приложение.