Календарь Google с учетной записью G Suite вставьте 403 - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно использовать учетную запись G Suite для вставки календаря и встречи, но я даже не могу вставить событие, я всегда получаю ответ 403

403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "calendar",
    "message" : "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority.",
    "reason" : "forbiddenForServiceAccounts"
  } ],
  "message" : "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority."
}

Я использую файл GCP p12 и учетную запись службы для создания календаря.

Я также нажимаю флажок Включить делегирование для всего домена в G Suite и добавляю свой clientId и область действия

https://www.googleapis.com/auth/admin.directory.resource.calendar, https://www.googleapis.com/auth/calendar.events

в консоли администратора G Suite

В чем может быть проблема!?

Кстати, мне нужно установить согласие OAuth? экран !? Я уже сохранил его, но не был одобрен Google.

Может кто-нибудь помочь PLS !!

В начале я получаю учетные данные с помощью следующего кода

credentials = new GoogleCredential.Builder().setTransport(httpTransport).setJsonFactory(JSON_FACTORY)
                    .setServiceAccountId(CalendarEntity.CALENDARID)
                    .setServiceAccountPrivateKeyFromP12File(new File(P12FILEPATH))
                    .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR)).build();

И затем я добавляю (моя учетная запись G Suite)

.setServiceAccountUser("xxx@xxx.com.tw") 

it response 401 Несанкционированный Как я могу поднять это !? ТНХ

1 Ответ

1 голос
/ 07 апреля 2020

Вам не хватает олицетворения.

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

Если вы предоставляете ему полномочия на уровне домена, но не «олицетворяете» какую-либо учетную запись, служебная учетная запись действует так, как если бы вы не предоставили эти полномочия: она пытается получить доступ к своим собственным календарям, файлам дисков, et c., или, в данном случае, попытка вставить Событие: то, что в настоящее время учетная запись службы * не может сделать , как вы, наверное, уже знаете.

Когда учетная запись службы олицетворяет другой пользователь в домене (то есть, когда он действует от имени пользователя), учетная запись службы может получить доступ к ресурсам, к которым может получить доступ этот пользователь. Ни больше ни меньше. Что делает делегирование полезным, так это то, что он может делать это с любым пользователем в домене.

Чтобы выдать себя за другого пользователя, вы должны указать адрес электронной почты этого пользователя. Я не знаю, какую библиотеку вы используете, если таковая имеется, но здесь вы можете увидеть, как выдать себя за другого пользователя с помощью Python, Java и обычного HTTP / REST. Обратитесь к этому ответу , если вам нужно сделать это в библиотеке Node.js. Если вы используете другую библиотеку, поищите соответствующий метод в документации библиотеки.

Ссылка:

...