Как можно, чтобы служебная учетная запись выдавала себя за другую служебную учетную запись? (Node.js) - PullRequest
0 голосов
/ 16 февраля 2020

Я аутентифицируюсь, задав в переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к ключу для моей учетной записи службы App Engine (например, example@appspot.gserviceaccount.com).

Если календарь используется совместно с учетной записью службы App Engine Я могу сделать это просто:

let googleCalendar = google.calendar({
  version: 'v3',
  auth: new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/calendar'],
  })
});

Но я хочу, чтобы пользователи поделились своим календарем с другой учетной записью службы, google-calendar@example.iam.gserviceaccount.com. Поэтому я хочу, чтобы учетная запись службы App Engine олицетворяла учетную запись google-calendar. Я пробовал это (и несколько других незначительных изменений):

let googleCalendar = google.calendar({
  version: 'v3',
  auth: new google.auth.GoogleAuth({
    clientOptions: {
      subject: 'google-calendar@uniserval-app.iam.gserviceaccount.com'
    },
    scopes: ['https://www.googleapis.com/auth/calendar'],
  })
});

Я получаю ошибку 401: Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested.

Я попытался сделать свою учетную запись службы App Engine участником на google-calendar служебная учетная запись и предоставление ей различных ролей, таких как Service Account User и Service Account Token Creator - но ничего не меняется.

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

...