Как предоставить веб-приложению Apps Script авторизацию для доступа к Google таблицам для всех пользователей в домене с использованием учетной записи службы

#google-apps-script #web-applications #google-oauth #google-sheets-api #service-accounts

#google-apps-script #веб-приложения #google-oauth #google-sheets-api #сервисные учетные записи

Вопрос:

У меня есть сайт Google, который просматривают сотни людей в день в пределах моего домена.

Я встроил в это множество веб-приложений Google Script, которые обращаются к электронной таблице и отображают данные в виде вывода HTML.

Моя проблема в том, что запуск сценариев от моего имени не сможет обрабатывать сотни одновременных пользователей, обращающихся к нему из-за одновременных вызовов квот Google.

Я не могу запускать скрипты от имени пользователей, потому что я бы предпочел, чтобы всем им не приходилось вручную авторизовывать каждый скрипт.

Мы создали учетную запись службы с доступом к API Sheets. Мне нужна помощь в использовании учетной записи службы для авторизации всех сценариев для всех пользователей в домене.

Вот веб-приложение Script, которое мне нужно авторизовать:

 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();
}