首页 > 解决方案 > Microsoft Graph - 无法读取/写入其他用户的日历

问题描述

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

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

端点

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

HTTP 标头

Content-Type    application/json

请求正文

{
  "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"
    }
  }
}

有什么我想念的吗?提前感谢您的帮助!


解决方案更新

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

标签: outlookoffice365microsoft-graph-apioutlook-restapioutlook-calendar

解决方案


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

在此处输入图像描述

根据您授予的权限类型,您需要使用适当的流来获取访问令牌(代表用户作为服务。对于应用程序权限,您必须使用流服务,而不是代表用户。

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

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


推荐阅读