Получите информацию о занятости без разрешения полного разрешения на чтение

Я ищу доступ к информации о занятости нескольких пользователей Microsoft Outlook (на одном и том же клиенте), чтобы я мог запланировать для них некоторые события.

Для этого у меня есть несколько возможностей:

Моя проблема в том, что все они требуют либо Calendars.Read или же Calendars.Read.Shared разрешения. Я протестировал решение 2 (потому что я предпочел разрешения приложений), но при перечислении событий я получаю ВСЕ сведения об этих событиях и потенциально могу также видеть вложение, которое является слишком широким разрешением.

Таким образом, мой вопрос заключается в следующем: как найти свободное время между несколькими пользователями, а затем отправить им приглашение в календаре Microsoft Outlook, не требуя предоставления слишком широких разрешений?

Дополнительный вопрос: в настоящее время я тестирую выборку общих событий с использованием Calendars.Read.Shared. Мой первый пользователь прошел через процесс OAuth и дал разрешение на мое приложение. Другой пользователь делится своим календарем (только для пользователей) с этим пользователем. Однако при попытке извлечь события (конечная точка: https://graph.microsoft.com/v1.0/users/{user_B_Graph_ID}/events Я получаю ошибку "403 - DelegatedCalendarAccessDenied". Кто-нибудь сталкивался с этим?

Вот файл документации для того, что я пытаюсь сделать.

2 ответа

Области разрешения приложений чрезвычайно широки по конструкции, это действительно сценарий "все или ничего". Если вы используете Calendar.Read Область приложения, тогда ваше приложение будет иметь доступ только для чтения к каждому календарю в клиенте. Невозможно ограничить, какие календари или какие данные он может получить доступ.

/findMeetingTimes конечная точка не поддерживает область приложения (она использует Calendars.Read.Shared делегированный объем), и это, вероятно, ближе всего к тому, что вы ищете.

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

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

Администраторы могут настроить политику доступа к приложениям, чтобы ограничить доступ приложений к определенным почтовым ящикам, а не ко всем почтовым ящикам в организации, даже если приложению предоставлены разрешения приложения Calendars.Read или Calendars.ReadWrite.

https://docs.microsoft.com/en-us/graph/permissions-reference#calendars-permissions

Другие вопросы по тегам