GoogleAPIs для Node.js, как oauth2 пользователя на сервере без браузера и взаимодействия с человеком - PullRequest
0 голосов
/ 13 октября 2018

Проблема:

Я создаю простое бэкэнд-приложение, которое проверит некоторые вещи в моей учетной записи в календаре Google.Я хочу, чтобы он запускал один вызов API один раз в неделю.

Календарь API требует использования oAuth2.Все примеры, которые я обнаружил, требуют взаимодействия с человеком:

  1. метод запуска
  2. сервер просит пользователя открыть браузер по специальному URL и скопировать код, отображаемый там
  3. пользователь делает это ивставляет код в консоль
  4. сервер проверяет его и сохраняет токен в некоторый файл
  5. сервер выполняет вызов календаря API

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

Один из способов - установить дату истечения срока действия токена более 1 недели, а затем обновлять ее при каждом вызове.Но это не могло восстановить соединение в некоторых случаях (например, потеря питания).

То, что я пробовал до сих пор: я явно начал здесь .Это сработало, но мне пришлось использовать браузер.

Тогда я нашел google-auth-library-nodejs .Но это по умолчанию JWT, который затем не работает с календарем.Или, возможно, я делаю это неправильно:

private async initApiKey() {
    const client = await auth.getClient();
    const calendar = await google.calendar({version: 'v3', client});
    const events = await calendar.events.list({
      calendarId: 'primary',
      timeMin: (new Date()).toISOString(),
      maxResults: 10,
      singleEvents: true,
      orderBy: 'startTime',
    });
    return client;
  }

google.calendar должно быть передано oauthclient, а здесь client - JWTClient.Я думаю, что я мог бы заставить oAuth, но это заставило бы браузер (он даже использует opn).

Как это сделать?

1 Ответ

0 голосов
/ 13 октября 2018

Если вы хотите делать запросы от имени пользователя (даже вашего собственного пользователя), вы должны получить токен oauth.

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

Цель OAuth - дать пользователю явное согласие разрешить взаимодействия API от своего имени сервером, зарегистрированным в приложении.с гуглом.Вам понадобится OAuth через браузер, чтобы получить токен.Токен обновления можно использовать намного позже, чтобы сохранить этот токен свежим.Вы можете сохранить эти токены и обновить их после потери питания или другого события перезапуска.

...