创建 OneDrive Business 订阅返回 403 禁止

Ata*_*har 3 onedrive microsoft-graph-api

我正在使用 Microsoft Graph API 来构建和集成 OneDrive。一切都运行良好,我已经能够注册我的应用程序、获取令牌、导航 OneDrive 项目和下载文件。

我开始创建订阅以在用户执行某些操作时接收来自 OneDrive 的通知。当用户使用他们的“个人帐户”登录时,这没有任何问题,但是当他们使用“工作或学校”帐户时,我收到以下错误消息:

{
  "error": {
    "code": "ExtensionError",
    "message": "Operation: Create; Exception: [Status Code: Forbidden; Reason: The caller does not have permission to perform the action.]",
    "innerError": {
      "request-id": "ffaf7fae-e0b0-4cd8-b911-bac4c2fb290a",
      "date": "2019-09-18T00:18:40"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我创建订阅的调用:

curl -X POST \
  https://graph.microsoft.com/v1.0/subscriptions \
  -H 'Authorization: Bearer [access_token]' \
  -H 'Content-Type: application/json' \
  -H 'Host: graph.microsoft.com' \
  -d '        {
            "resource": "me/drive/root",
            "changeType": "updated",
            "clientState": "[email_Address]",
            "notificationUrl": "https://webhook_url",
            "expirationDateTime": "2019-09-19T04:43:47.6099364+00:00"
        }'
Run Code Online (Sandbox Code Playgroud)

用户具有Files.ReadWrite.All基于文档的权限应该足够了。

小智 6

我有同样的问题。唯一的区别是我试图driveItem在企业 OneDrive 路径上设置订阅,/users/<id>/drive/root但在响应中遇到与您相同的错误。

因此,使用相同的访问令牌,我做了 aGET /v1.0/users/<id>/drive/rootdriveId从响应中获取了父代的 。然后我尝试在 at 创建订阅/drives/<driveId>/root并且它起作用了。所有请求都使用相同的访问令牌,而以前的方式过去几个月都在使用。

因此,您可以尝试为您的对象执行 GET 操作/me/drive/root,看看是否可以使用driveId.

作为奖励,订阅现在像我期望的那样发送网络钩子。