Что я хочу реализовать
Использование 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"
}
]
}