Не удается получить доступ к API Календаря Google через учетную запись службы - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь получить свой собственный календарь занятости с помощью простого вызова POST в Java, и я сталкиваюсь с ошибками доступа.В основном я получаю ошибку 404, notFound, например, так:

{
 "kind": "calendar#freeBusy",
 "timeMin": "2019-05-28T13:00:00.000Z",
 "timeMax": "2019-05-28T21:00:00.000Z",
 "calendars": {
  "me@mycompany.com": {
   "errors": [
    {
     "domain": "global",
     "reason": "notFound"
    }
   ],
   "busy": []
  }
 }
}

Код довольно прост.Я могу получить именно то, что мне нужно, если я использую токен на предъявителя с OAuth Playground, все работает просто отлично.Вот мой соответствующий код:

        ClassLoader classLoader = getClass().getClassLoader();
        File file = new File(Objects.requireNonNull(classLoader.getResource("...a59.json")).getFile());

        GoogleCredential credential = GoogleCredential
                .fromStream(new FileInputStream(file))
                .createScoped(CalendarScopes.all());

        credential.refreshToken();
        String accessToken = credential.getAccessToken();

Значение accessToken, которое я получаю, приводит к ответу выше.

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

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

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Вам нужен еще один шаг.

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

Открыть файл something-something.json, который вы скачали при созданииучетную запись службы с текстовым редактором, и вы найдете адрес электронной почты, необходимый в качестве значения пары ключ / значение «client_email».

Перейдите в свой календарь «Настройки и обмен» и нажмите «+Кнопка «Добавить людей», которую вы найдете в разделе «Поделиться с конкретными людьми».

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

0 голосов
/ 12 июня 2019

Так что мне удалось выяснить это самостоятельно.Кажется, что моя учетная запись службы была настроена правильно, но разрешения, которые я добавил, не были.Для справки вот что я хотел:

  1. Получить доступ к календарю только для чтения.
  2. Возможность извлекать календарь любого пользователя в моей организации.

Я создал учетную запись службы, удостоверился, что у нее есть авторизация делегирования по всему домену, добавил API-интерфейсы Calendar и Admin в мой проект, который содержит учетную запись службы, но я не смог заставить его работать без добавления учетной записи службыв календарь согласно сообщению @Alex Baban выше.

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

Надеюсь, это поможет кому-то еще в будущем.

...