调用 POST 到 https://graph.microsoft.com/v1.0/me/events 不工作

Call to POST to https://graph.microsoft.com/v1.0/me/events not working

我今天大部分时间都在尝试搜索,但没有找到问题的根源。我注册了一个应用程序并根据需要复制了 ID 以调用 Microsoft Graph API。

在对 users/xxxxxxx-f192-4758-xxxx-3f1c27ee5ef9/events 进行 GET 调用时,我确实在日历中取回了我的所有事件。

但问题是,当使用以下数据对 me/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” 。我已确保 Calendars.ReadWrite 的 API 权限确实存在并且也已获得同意(甚至重做以查看是否有所不同)

请指教我哪里错了?

谢谢

问题可能是由于您在 Application 类型(而不是 Delegated 类型)中分配权限 Calendars.ReadWrite 和您使用客户端凭证流进行身份验证。由于客户端凭证流不需要您输入用户名和密码,因此访问令牌不会包含用户信息。当您请求 api https://graph.microsoft.com/v1.0/me/events 时,api 后端不知道 me 是谁。所以它显示 403 错误消息。

为了解决这个问题,您可以在您的请求api中使用“我”的对象id来替换me。喜欢 POST https://graph.microsoft.com/v1.0/{user object id}/events.