Скрипт Google Apps script.run - получение неожиданного 401 даже при отправке токена Oauth - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь запустить скрипт Google Apps, используя метод API скриптов Google Apps scripts.run.Однако я получаю сообщение об ошибке 403 со следующим сообщением об ошибке:

{
  "error": {
    "code": 401,
    "message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
    "status": "UNAUTHENTICATED"
  }
}

Вот заголовки отправляемого POST-запроса:

authorization: Bearer my-oauth-token
Content-Type: application/json
Origin: http://localhost:5000
Referer: http://localhost:5000/static/test.html
User-Agent: Mozilla/5.0...

Я отправляю запрос на https://script.googleapis.com/v1/scripts/my_script_id:run?key=my_api_key

Есть идеи?Я пробовал искать примеры, но все, что я получаю, это те, которые вы клиентские библиотеки API Google, когда мне нужно использовать API REST.Я точно знаю, что мои токены oauth правильны, так как я делаю запросы к другим API Google с таким же токеном.

Это мой текущий поток:

  1. Перенаправить пользователя на URL-адрес oauthи получите код обмена.URL моего перенаправления
"https://accounts.google.com/o/oauth2/v2/auth?"
        "scope=https://www.googleapis.com/auth/drive&"
        "state=%s&"
        "redirect_uri=redirect_uri&"
        "client_id=id&"
        "response_type=code&"
        "access_type=offline&"
        "prompt=consent"
Код обмена для токена обновления Используйте токен обновления для получения токена доступа oAuth.Для этого я отправляю запрос POST по номеру https://www.googleapis.com/oauth2/v4/token. Я использую токен доступа для получения миниатюр от слайдов пользователя Google.Этот запрос успешно выполнен. Я отправил запрос на выполнение скрипта Google Apps.Вот краткий код этого запроса:
xhr.open("POST", "https://script.googleapis.com/v1/scripts/id:run", true);
xhr.setRequestHeader("authorization", "Bearer " + oauth_token);
xhr.onload = function() { // do stuff }
xhr.onerror = function() { // print error }
xhr.send(JSON.stringify({
   "function": "run",
    "parameters": [
       id1,
       id2
    ]
}));

Это дает мне 401 ошибку.Я также получаю сообщение «Предварительные заголовки показаны».Я посмотрел на это, и это не похоже на мою проблему. enter image description here

Это скрипт, который я пытаюсь запустить:

function doGet(e) {
  if(!(e.parameter.source && e.parameter.destination)) {
    throw new Error("Not all parameters specified");
  }
  copySlides(e.parameter.source, e.parameter.destination);
}

function copySlides(sourceId, destinationId) {
  var src = SlidesApp.openById(sourceId);
  var dest =  SlidesApp.openById(destinationId);

  src.getSlides().forEach(function(slide, index) {
      dest.appendSlide(slide);
  });
  return ContentService.createTextOutput("Done Copying Slides");
}

1 Ответ

0 голосов
/ 11 апреля 2019

Оказывается, мне не хватало дополнительной области oAuth, так как мой скрипт использовал Google SlidesApp.Добавлена ​​https://www.googleapis.com/auth/presentations область видимости исправлена.

...