Получите информацию о занятости без разрешения полного разрешения на чтение
Я ищу доступ к информации о занятости нескольких пользователей 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