Я пытаюсь получить свой собственный календарь занятости с помощью простого вызова POST в Java, и я сталкиваюсь с ошибками доступа. В основном я получаю ошибку 404, notFound, например:
{
"kind": "calendar#freeBusy",
"timeMin": "2019-05-28T13:00:00.000Z",
"timeMax": "2019-05-28T21:00:00.000Z",
"calendars": {
"[email protected]": {
"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
, чтобы он имел полный доступ к настройкам в проекте.
Я уверен, что это что-то маленькое и простое с конфигурацией моей учетной записи службы, но я не могу понять, что это такое.
Вам нужен еще один шаг.
Вам нужно будет поделиться своим календарем с вашей учетной записью службы.
Откройте файл something-something.json
, который вы загрузили при создании учетной записи службы с помощью текстового редактора, и вы найдете адрес электронной почты, необходимый в качестве значения пары ключ/значение «client_email».
Перейдите в свой календарь «Настройки и общий доступ» и нажмите кнопку «+ Добавить людей», которую вы найдете в разделе «Поделиться с определенными людьми».
Вы, вероятно, сделали это, но для других, вот полная процедура доступа к Календарю Google с помощью сервисного аккаунта: (разрешить моему пользователю добавлять встречу в мой календарь с API календаря Google с PHP без аутентификации)
Это всего лишь предположение, поскольку у меня нет доступа или опыта работы с корпоративной версией, но попробуйте добавить учетную запись службы в качестве другого пользователя в вашей организации.
Так что мне удалось выяснить это самостоятельно. Кажется, моя учетная запись службы была настроена правильно, но добавленные мной разрешения — нет. Для протокола, вот что я хотел:
Я создал учетную запись службы, убедился, что у нее есть авторизация широкого делегирования домена, добавил API-интерфейсы календаря и администратора в свой проект, который содержит учетную запись службы, но я не мог заставить ее работать без добавления моей учетной записи службы в календарь через @ Сообщение Алекса Бабана выше.
Я вернулся к чертежной доске, так как добавление этого к нескольким десяткам учетных записей не было идеальным решением, и тогда я нашел его. Мне пришлось добавить следующие авторизации для моей учетной записи службы:
Надеюсь, это поможет кому-то еще в будущем.
Блестяще!! Это сделало это! Теперь следующий вопрос: как я могу поделиться этим в своей организации? У меня есть права администратора для нашего G Suite, но я не уверен на 100% в настройках.