Не удается получить доступ к скрипту Служб Google, развернутому в виде веб-приложения с токеном доступа - PullRequest
1 голос
/ 30 мая 2019

Хотелось бы немного больше понять, как работают веб-приложения Apps Script, когда они получают доступ к ним с помощью маркера доступа OAuth.

Это веб-приложение Apps Script:

function doPost(e) {
  return ContentService.createTextOutput('ok');
}

function doGet(e) {
  return ContentService.createTextOutput('ok');
}

Это развернуто как: Me

У кого есть доступ к приложению: см. Ниже

Я использую Postman для доступа к веб-приложению Apps Script. Я вызываю URL-адрес веб-приложения (заканчивающийся /exec) и предоставляю заголовок Authorization: Bearer ACCESS_TOKEN.

Я генерирую токены доступа с помощью Google OAuth Playground

  • Я вошел в систему как я: он работает со всеми разрешениями «у кого есть доступ к приложению», чего я и ожидаю.
  • Вы вошли в систему как кто-то еще в домене: работает только для разрешения «любой, даже анонимный», и только если входящий запрос не имеет заголовка авторизации. В противном случае я получаю 403 Запрещенную ошибку. Я ожидаю, что он будет работать для разрешений ниже:
    • «любой, даже анонимный», даже если запрос имеет заголовок авторизации
    • 'кто'
    • 'любой в домене'
  • Вы вошли как кто-то за пределами домена: работает только для разрешения «любой, даже анонимный», и только если входящий запрос не имеет заголовка авторизации. В противном случае я получаю 403 Запрещенную ошибку. Я ожидаю, что он будет работать для разрешений ниже:
    • «любой, даже анонимный», даже если запрос имеет заголовок авторизации
    • 'кто'

Что мне не хватает?

EDIT

Область, используемая для генерации токена доступа, составляет https://www.googleapis.com/auth/drive

1 Ответ

1 голос
/ 30 мая 2019

Как насчет этого обходного пути?

Спецификация:

  • Когда пользователи получают доступ (запускают сценарий) к веб-приложениям, которые были развернуты как "Who has access to the app:": Anyone, сценарий веб-приложений должен предоставляться пользователям. А также, токен доступа не требуется. Это спецификация от 11 апреля 2018 года.

Цель:

  • Вы хотите получить доступ к веб-приложениям при условии "Who has access to the app:": Anyone без совместного использования сценария.

К сожалению, это может быть напрямую достигнуто спецификацией. Поэтому необходимо подумать об обходном пути.

Обход:

В описанной выше ситуации, когда вы хотите предоставить пользователям доступ к веб-приложениям без совместного использования сценария, я хотел бы предложить следующий обходной путь.

  1. Развертывание веб-приложений как "Who has access to the app:": Anyone, even anonymous.
  2. Когда пользователи получают доступ к веб-приложениям, пользователи используют пароль с параметром запроса и / или полезной нагрузкой.

С помощью указанных выше настроек вы можете предоставить пользователям доступ к веб-приложениям без совместного использования сценария. В этом случае вместо токена доступа используется пароль.

Пример сценария: сторона веб-приложений

В этом примере пароль используется в качестве параметра запроса. Это можно использовать как ключ API.

function doPost(e) {
  if (e.parameter.password === "sample") {
    return ContentService.createTextOutput("Done.");
  }
  return ContentService.createTextOutput("Error.");
}

function doGet(e) {
  if (e.parameter.password === "sample") {
    return ContentService.createTextOutput("Done.");
  }
  return ContentService.createTextOutput("Error.");
}

Пример скручивания: сторона клиента

curl -L "https://script.google.com/macros/s/###/exec?password=sample"

Примечание:

  • Когда он обращается к веб-приложениям, развернутым с вышеуказанным условием, используя приведенный выше пример скручивания, Done. возвращается из doGet(). Если пароль неверный, возвращается Error.. Таким образом, вы можете предоставить пользователям доступ к веб-приложениям без совместного использования сценария.
  • При изменении сценария веб-приложений разверните веб-приложения в новой версии. Этим отражается последний скрипт.

Ссылки:

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