Как предоставить авторизацию Apps Script Web App для доступа к Google Sheets для всех пользователей в домене, используя учетную запись службы - PullRequest
2 голосов
/ 01 апреля 2019

У меня есть сайт 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...