У меня есть сайт Google, который просматривается сотнями людей в день в моем домене.
Я встроил в это множество веб-приложений Google-скриптов, которые обращаются к электронной таблице и отображают данные в виде HTML-вывода.
Моя проблема заключается в том, что выполнение сценариев под моим именем не сможет обрабатывать сотни одновременных пользователей, обращающихся к нему из-за одновременных вызовов Google квот.
Я не могу запускать сценарии как пользователи, так как я бы предпочел, чтобы все они не авторизовали каждый скрипт вручную.
Мы создали учетную запись службы с доступом к API Sheets.
Мне нужна помощь в использовании учетной записи службы для авторизации всех сценариев для всех пользователей домена.
Вот веб-приложение скрипта, которое мне нужно авторизовать:
function doGet()
{
var value = SpreadsheetApp.openById(id).getSheetByName(name).getRange(2, 1).getValue();
value = CreateHtml(value);
return HtmlService.createHtmlOutput(value);
}
Код, который я нашел в Интернете, я не уверен, как адаптировать его для решения моей проблемы.
У меня уже есть JSON с соответствующими ключами и пользовательской информацией, но я не знаю, каким должно быть хранилище свойств, параметры или области действия
function getOAuthService()
{
return OAuth2.createService("Service Account")
.setTokenUrl('https://oauth2.googleapis.com/token')
.setPrivateKey(JSON.private_key)
.setIssuer(JSON.client_email)
.setSubject(JSON.user_email)
.setPropertyStore(PropertiesService.getScriptProperties())
.setParam('access_type', 'offline')
.setScope('https://www.googleapis.com/auth/drive');
}
Таким образом, код с того же сайта, что и код выше. Я не знаю, нужно ли мне что-то с этим делать или нет.
function getUserFiles()
{
var service = getOAuthService();
Logger.log(service.hasAccess());
if (service.hasAccess())
{
var url = 'https://www.googleapis.com/drive/v2/files?pageSize=1'
var response = UrlFetchApp.fetch(url, {
headers: {
Authorization: 'Bearer ' + service.getAccessToken()
}
});
}
}
function reset()
{
var service = getOAuthService();
service.reset();
}