Как я могу создать аутентифицированный API doPost с помощью скрипта Google Apps? - PullRequest
1 голос
/ 19 октября 2019

Что я хочу реализовать

Использование doPost API с аутентификацией от curl


Теперь я использую API, который автоматически создает форму Googleиз данных POST и возвращает URL-адрес формы и другие данные. Это сделано с помощью GoogleAppsScript doPost.

Этот метод публикации

У кого есть доступ к приложению: Любой, даже анонимный

Даже если вы не вошли в свой Googleаккаунт, вы можете использовать API, если знаете URL-адрес (скорее я использую curl для создания API, чтобы я мог использовать его анонимно) До сих пор не было никаких проблем, потому что он работал с личным аккаунтом Google. Но теперь мне нужно запустить этот API с моей корпоративной учетной записью G-suite Google. В этом случае единственный вариант для тех, кто имеет доступ к приложению: это только я или учетная запись, принадлежащая компании. Поэтому нельзя использовать API от анонимного, например, команды cURL.

Как мне доказать, что я являюсь владельцем этого скрипта или пользователем в моей компании?

То же самое с doGet, а не просто doPost. Когда браузер, вошедший в мою учетную запись, отправляет HTTP-запрос на «URL текущего веб-приложения», ответ возвращается, как и ожидалось. Если я использую анонимного пользователя, такого как curl, естественно перенаправить на страницу входа в учетную запись Google.

Можно ли доказать, что пользователь curl - это я или сотрудник компании, выдав токен и получив его? в заголовке HTTP? Или есть какой-нибудь способ добиться того же, что и мой API с некоторыми альтернативами?

Даже если это не curl, я могу использовать скрипт, написанный на python или js и т. Д.

Если вы знакомы с GAS, у вас есть опыт или какая-то информация, которая может оказаться полезной, пожалуйста, дайте мне знать.

Спасибо.

И я не очень хорош в английском. Извините за плохую грамматику.


Что я пробовал

Я слышал, что API с аутентификацией может быть создан с помощью ExecutionAPI (Apps Script API?). Я тоже бросил вызов. Однако API еще не доступен из curl.


Требуемая область OAuth для этого сценария

https://www.googleapis.com/auth/forms


Исходный код


function doPost(e) {

    var postData = JSON.parse(e.postData.getDataAsString());
    if (postData.title) {
        const title = postData.title;
        const description = postData.description;
        } else {
        var returnData = ContentService.createTextOutput();
        returnData.setMimeType(ContentService.MimeType.JSON);
        returnData.setContent(
            JSON.stringify({
                message: 'please input title!',
                error: true,
            })
        );
        return returnData;
    }

    // create form
    var form = FormApp.create(title);
    form.setDescription(description);

    var items = postData.items;
    var itemIdList = []

    while (items.length) {
        var item = items.shift();
        var textItem = form.addTextItem();
        textItem
            .setTitle(item.question);
        itemIdList.push({
            question: item.question,
            item_id: textItem.getId(),
        });
    }

    var returnData = ContentService.createTextOutput();
    returnData.setMimeType(ContentService.MimeType.JSON);
    returnData.setContent(
        JSON.stringify({
            published_url: form.getPublishedUrl(),
            edit_url: form.getEditUrl(),
            error: false,
            form_id: form.getId(),
            item_id_list: itemIdList,
        })
    );
    return returnData;
}

Пример данных POST

{
    "title": "Question title",
    "description": "This is a description.",
    "items": [
        {
            "question": "How old are you?"
        },
        {
            "question": "What's your name"
        },
        {
            "question": "Please tell me the phone number"
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...