Вызов POST на https://graph.microsoft.com/v1.0/me/events не работает

Я пытался искать большую часть сегодняшнего дня и не нашел корень моей проблемы. Я зарегистрировал приложение и скопировал идентификаторы, необходимые для вызовов API Microsoft Graph.

При вызове GET для пользователей/xxxxxxx-f192-4758-xxxx-3f1c27ee5ef9/events я получаю все свои события в календаре.

Но проблема в том, что при выполнении POST-вызова мне/событиям используются данные ниже:

        $calendarEventData = array
        (
            'subject' => 'Test event in my calendar',
            'start' => array
            (
                'dateTime' => '2020-12-22T15:14:14.524Z',
                'timeZone' => 'UTC'
            ),
            'end' => array
            (
                'dateTime' => '2020-12-22T17:14:14.524Z',
                'timeZone' => 'UTC'
            ),
            'body' => array
            (
                'content' => 'This is some hard coded body content',
                'contentType' => 'text'
            )
        );

Я получаю ответ HTTP/1.1 403 Forbidden, возвращенный для https://graph.microsoft.com/v1.0/me/events. Я убедился, что разрешения API для Calendars.ReadWrite действительно существуют, и согласие также было предоставлено (даже переделал это, чтобы увидеть, имеет ли это значение)

Посоветуйте, где я ошибаюсь?

Спасибо


person Yatish Madhav    schedule 22.12.2020    source источник
comment
Привет, могу ли я узнать, поможет ли решение, которое я предоставил ниже, вашей проблеме? Если это поможет решить вашу проблему, примите это как ответ (нажмите на галочку рядом с моим ответом, чтобы переключить его с серого на заполненный). Заранее спасибо~   -  person Hury Shen    schedule 24.12.2020
comment
Если все еще есть какие-либо проблемы, пожалуйста, дайте мне знать.   -  person Hury Shen    schedule 25.12.2020


Ответы (1)


Проблема может быть вызвана тем, что вы назначаете разрешение Calendars.ReadWrite в типе Приложение (но не в типе Делегированное) и используете поток учетных данных клиента для аутентификации. Поскольку поток учетных данных клиента не требует ввода имени пользователя и пароля, токен доступа не будет содержать информацию о пользователе. Когда вы запрашиваете API https://graph.microsoft.com/v1.0/me/events, серверная часть API не знает, кто такой me. Таким образом, он показывает сообщение об ошибке 403.

Чтобы решить эту проблему, вы можете использовать идентификатор моего объекта для замены me в вашем запросе API. Как POST https://graph.microsoft.com/v1.0/{user object id}/events.

person Hury Shen    schedule 23.12.2020
comment
ОК, отлично - спасибо за помощь, @Hury ... Да, это помогло. У меня также были некоторые проблемы с тем, как данные JSON передавались. Но после некоторых проб и ошибок и вашего комментария это работает! Спасибо - person Yatish Madhav; 28.12.2020