Получение информации о свободном / занятом времени без авторизации полных разрешений на чтение

Я ищу доступ к информации о свободном / занятом времени нескольких пользователей 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. Кто-нибудь сталкивался с этим?

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


person Konrad    schedule 14.03.2019    source источник


Ответы (1)


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

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

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

person Marc LaFleur    schedule 14.03.2019
comment
Проблема в том, что нашему клиенту не очень нравится идея предоставления нам прав на чтение описаний событий, участников и прикрепленных файлов. В настоящее время я предлагаю довольно близкое решение этой проблемы. Использование / findMeetingTimes с Calendars.Read.Shared с учетной записью пользователя для нашего приложения, которая по умолчанию должна иметь доступ ко всем другим календарям клиентов, но только по доступности. Это единственный обходной путь, о котором я подумал, без необходимости полагаться на полный доступ для чтения календаря. Рад слышать твои мысли. - person Konrad; 16.03.2019