Проблема аутентификации при использовании скрипта Google Apps, развернутого в виде веб-приложения - PullRequest
0 голосов
/ 25 апреля 2018

Я сталкиваюсь с ошибками HTTP 401 при попытке вызвать развернутый скрипт приложений (в виде веб-приложения, доступного для "любого") из второго GAS с UrlFetch и носителем в заголовке авторизации. Сценарии работали отлично в течение нескольких месяцев, примерно две недели назад. Вот два небольших скрипта для воспроизведения ошибки.

Скрипт A - Развернут как веб-приложение, доступное для "Любого".

function doGet(e) {
  var params = e.parameter.params;
  console.info("Parameters : " + JSON.stringify(e.parameter));
  return ContentService.createTextOutput("Success");
}

Скрипт B - вызов скрипта A с помощью UrlFetch

function callURL() {
  var param = {
    method      : "get",
    headers     : {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    followRedirects : true,
    muteHttpExceptions:true,
  };
  var url = "https://script.google.com/macros/s/<script_A_deployed_url>/exec?param1=test";
  var resp = UrlFetchApp.fetch(url,param);
  if(resp.getContentText() != "Success"){
    console.info(resp.getContentText());
    throw resp.getContentText();
  }
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Танаике указал мне в правильном направлении. По-видимому, некоторые внутренние правила недавно изменились в механизме аутентификации для Apps Script, развернутого как веб-приложение. Для сценария B область по умолчанию с UrlFetch составляет https://www.googleapis.com/auth/script.external_request, но, похоже, теперь нам нужно как минимум доступ для чтения к сценарию A , что означает, что нам также нужны области действия Drive. Для этого, например, вы можете использовать эту функцию в сценарии B для их авторизации.

function setScope() {
  DriveApp.getRootFolder();
}
0 голосов
/ 26 апреля 2018

Можете ли вы еще раз подтвердить следующие пункты?

  1. Для клиентской стороны, есть ли какие-либо функции, кроме вашего сценария клиентской стороны в проекте?Если в проекте есть только сценарий, область доступа к веб-приложениям недостаточна.Области применения Drive API должны быть включены в маркер доступа.
  2. В моем журнале, когдаWho has access to the app: устанавливается как Anyone, я подтвердил, что с 11 апреля 2018 года для совместного доступа к веб-приложениям требуется общий доступ к проекту.Это может быть связано с обновлением Google.
    • Пожалуйста, поделитесь проектом с веб-приложениями среди пользователей и попробуйте снова.
  3. Для стороны сервера веб-приложений, если вы установили User accessing the web app для Execute the app as:, пожалуйста,авторизовать области, используя собственный браузер.Это разрешение требуется сделать только один раз.

Если это не помогло в вашей ситуации, извините.

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