Microsoft Graph - 无法 read/write 其他用户的日历

Microsoft Graph - Can't read/write the calendar of other users

我在 Azure 上注册了一个 Web 应用程序,目的是能够读取和写入其他用户的日历。为此,我在 Azure 上为此应用设置了 these permissions。

但是,例如,当我尝试为给定用户创建新事件时,我收到一条错误消息。这是我正在使用的:

端点

https://graph.microsoft.com/v1.0/users/${requester}/calendar/events

HTTP Header

Content-Type    application/json

请求Body

{
  "subject": "${subject}",
  "body": {
    "contentType": "HTML",
    "content": "${remarks}"
  },
  "start": {
    "dateTime": "${startTime}",
    "timeZone": "${timezone}"
  },
  "end": {
    "dateTime": "${endTime}",
    "timeZone": "${timezone}"
  },
  "location": {
    "displayName": "${spaceName}",
    "locationEmailAddress": "${spaceEmail}"
  },
  "attendees": [
    {
      "emailAddress": {
        "address": "${spaceEmail}",
        "name": "${spaceName}"
      },
      "type": "resource"
    }
  ]
}

错误信息

{
  "error": {
    "code": "ErrorItemNotFound",
    "message": "The specified object was not found in the store.",
    "innerError": {
      "request-id": "XXXXXXXXXXXXXXXX",
      "date": "2018-07-11T09:16:19"
    }
  }
}

有什么我想念的吗?在此先感谢您的帮助!


解决方案更新

我按照 link 中描述的步骤设法解决了问题: https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_service

从您的屏幕截图可以看出您使用了应用程序权限(尽管最好在您的问题中包含此信息):

根据您授予的权限类型,您需要使用适当的流程来获取访问令牌 (on behalf of a user or as a service。对于应用程序权限,您必须使用流程来提供服务,而不是代表用户。

您还可以使用 jwt.io 检查您的令牌并确保其有效负载包含适当的角色。如果不是,很可能你使用了错误的流程。

关于它的过期时间,您可能已经找到有关刷新令牌的信息(for example here)。请记住,它仅适用于代表用户授予的权利。对于没有用户的访问,你应该确保你知道你的令牌何时到期并相应地请求一个新的。