Токен Oauth скрипта Google Apps просачивается через учетные записи пользователей

# #google-apps-script #google-data-studio

Вопрос:

При разработке соединителя для Google Realtime API я заметил очень странную проблему. Похоже, что токен, полученный в потоке Oauth с помощью этой библиотеки Github, просачивается через несколько учетных записей. Я использую следующую конфигурацию:

 const getService = () => {
  return OAuth2.createService('realtime')
    .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth')
    .setTokenUrl('https://oauth2.googleapis.com/token')
    .setClientId('...')
    .setClientSecret('...')
    .setCallbackFunction('authCallback')
    .setScope('https://www.googleapis.com/auth/analytics.readonly')
    .setPropertyStore(PropertiesService.getUserProperties())
    .setCache(CacheService.getUserCache())
    .setLock(LockService.getUserLock())
    .setParam('login_hint', Session.getEffectiveUser().getEmail())
    .setParam('access_type', 'offline')
    .setParam('prompt', 'consent');
} 

Короче говоря, настройка выглядит следующим образом. Пользователь проходит аутентификацию в студии данных Google, они получают токен. С этого момента каждый запрос отправляется в мой пользовательский API, например

     const token = getService().getAccessToken();

    const options = {
        method: "get",
        muteHttpExceptions: true,
        headers: {
            Authorization: token
        }
    }
    const res = UrlFetchApp.fetch(
        `https://myapi.com/`,
        options
    ); 

На сервере я получаю токен и звоню в Google Realtime API от имени пользователя.
Теперь проблема, которую я заметил. Я протестировал соединитель на 2 аккаунтах:

  1. Пользователь 1 (владелец сценария)
  2. Пользователь 2 (другая учетная запись, принадлежащая мне)

Я аутентифицировал пользователя 1 и сделал пару успешных звонков в свой API. Через некоторое время я попытался аутентифицировать пользователя 2 и заметил, что на первом этапе аутентификации, где я перечисляю учетные записи Google Analytics, к которым у пользователя есть доступ, я получил список учетных записей пользователя 1 (!). Похоже,что каким-то странным образом токен, сгенерированный для Пользователя 1, также был передан Пользователю 2. Теперь, после попытки выполнить следующие шаги конфигурации (выбор свойства, представлений и т.д.) Я получаю ошибку «пользователь не прошел проверку подлинности».

Итак, подведем итог. Пользователь 2 на краткий миг видит список учетных записей Google Analytics Пользователя 1. Следующие запросы не выполняются из-за ошибки «не прошедшей проверку подлинности». Затем весь сценарий прерывается, так как токен сохраняется в PropertiesService . Каждый последующий запрос приводит к ошибке. Проблема не является последовательной, я имею в виду, что это происходит не в 100% случаев, но это происходит довольно часто. Я действительно понятия не имею, как это отладить. Кто-нибудь может подсказать, делаю ли я что-то не так или это какая-то серьезная ошибка безопасности в скрипте Google Appps?