API Office365 – доступ к другим календарям пользователей / комнат

Я пытаюсь создать приложение, которое будет иметь доступ ко всем календарям организации (пользователям, комнатам и т. Д.).

В настоящее время мой поток авторизации будет подписан от имени пользователя-арендатора и использовать токены обновления для доступа к необходимым ресурсам. Как только я сделаю запрос:

https://outlook.office365.com/api/v1.0/users/{room-resource@email}/events 

Моему заявлению отвечает 401

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

Прочитав этот пост, кажется, что API использует тип предоставления учетных данных клиента OAuth (только для токенов). Вместо использования /oauth/common конечной точки мне теперь нужно использовать /oauth/tenant-id который я могу получить через токен JWT, возвращаемый в code+id_token . Это приводит к моему первому вопросу:

Использует ли поток OpenID единственный способ изначально получить идентификатор арендатора?

Затем, когда вещи становятся немного нечеткими для меня.

Теперь нам нужно создать сертификат SSL X.509 и загрузить отпечаток / значение в наш манифест приложения Azure. Достаточно легко.

Затем, согласно обсуждению в Office 365 Rest API – Проверка подлинности недели в Daemon, мы создаем конкретный код JWT, base64 и подписываем его с нашим сертификатом.

Я на самом деле не добрался до последних нескольких шагов, но я могу опубликовать свои результаты, когда смогу. Я просто убедился, что, похоже, я следую правильной процедуре, для каких ресурсов я пытаюсь получить доступ. Я знаю, что токены службы – это довольно новая функция, просто прискорбно, что мне пришлось найти поток отправки подписанного JWT на Stackoverflow, а не официальную документацию MSFT …

Я также заметил, что, поскольку мы используем поток учетных данных клиента, мы не refresh_token в ответе. Поэтому для моего последнего вопроса:

При доступе к различным ресурсам (например API Graph API / Office365) я просто получаю другой токен доступа для каждого ресурса, используя мой подписанный запрос вместо использования токенов обновления для нескольких ресурсов ?

Если общее направление, похоже, идет правильно, дайте мне знать! Любая помощь приветствуется.

Solutions Collecting From Web of "API Office365 – доступ к другим календарям пользователей / комнат"

Поздно на вечеринку, но я тоже борюсь за это, и вот что я нашел.

Маршрут OAuth в Office365 позволит вам получить доступ к вашему собственному календарю. Не имеет значения, какие разрешения у приложения есть в Azure или что вы настраиваете для каждого пользователя. Это ограничение API.

Это было подтверждено MSFT в комментариях к этому вопросу StackOverflow:
API Office365 – администратор, получающий доступ к событиям календаря других пользователей / комнат

Однако вы можете использовать Basic Auth для доступа к календарю другого человека.

1) Настройте пользователя «Первичный» (тот, с которым вы выполняете аутентификацию), чтобы иметь доступ к учетной записи «Вторичный» (та, которую вы хотите просмотреть). Для этого зайдите в Свойства Exchange для Вторичного пользователя -> Делегирование почтовых ящиков и укажите полный доступ к Первичному пользователю.

2) Передайте аутентификацию вместе с запросом API Office365:

 <?php $username = 'primary@user.com'; $password = 'mypass'; $URL = 'https://outlook.office365.com/api/v1.0/users/secondary@user.com/events'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$URL); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $result=curl_exec ($ch); curl_close ($ch); print_r($result); ?> 

3) Если вы сделали все правильно, теперь у вас есть события для Вторичного пользователя!

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