Выдавать себя за пользователя gCal из учетной записи службы - PullRequest
0 голосов
/ 04 марта 2020

Похоже, в конце прошлого года Google изменил поведение API календаря, не позволяя учетным записям служб создавать события календаря с посетителями.

https://github.com/googleapis/google-api-php-client/issues/1725

https://support.google.com/calendar/thread/16769831?hl=en

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

const jwt = jsonwebtoken.sign({
    iss: GOOGLE_CALENDAR_SERVICE_ACCOUNT_EMAIL,
    scope: SCOPES,
    aud: 'https://oauth2.googleapis.com/token',
    iat: currentUnixTimeInSeconds,
    exp: currentUnixTimeInSeconds + 3600,
    sub: GOOGLE_CALENDAR_TARGET_ACCOUNT_EMAIL,
  },
  privateKey,
  {
    algorithm: 'RS256',
    header: {
      alg: 'RS256',
      typ: 'JWT',
    },
  }
);

... и затем позвоните https://oauth2.googleapis.com, чтобы получить токен на предъявителя, но это всегда ошибки. (с «Invalid JWT: проверка неуспешной аудитории. Правильная аудитория ...», следующая за тем, что выглядит как URL-адрес маркера длинного носителя »

https://oauth2.googleapis.com/token?grant_type=urn: ietf: params: oauth: grant -тип: jwt-bearer & assertion = ...

)

Как правильно олицетворять учетные записи служб с API Календаря Google?

1 Ответ

0 голосов
/ 05 марта 2020

То, что вы ищете, называется Domain Wide Delegation , и вся процедура очень подробно описана на этой странице документации . Гораздо проще и безопаснее использовать правильную библиотеку, чем на самом деле делать все запросы.

Из собственной документации Google о том, как этого добиться с помощью HTTP-запросов:

Рекомендация: Хотя ваше приложение может выполнить эти задачи Благодаря непосредственному взаимодействию с системой OAuth 2.0 с использованием HTTP, механизм межсерверной аутентификации требует, чтобы приложения создавали и криптографически подписывали JSON веб-токены (JWT), и легко допускать серьезные ошибки, которые могут иметь серьезные последствия. на безопасность вашего приложения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...