使用Graph API访问Shared with Me项目会导致401 Unauthorized

时间:2016-05-27 11:00:09

标签: office365 onedrive microsoft-graph

这是我第一次发帖提问,对不起,如果我的措辞很奇怪。
我的参考资料是这个文件:https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/drive_sharedwithme
我希望得到一份“与我共享”的列表。已登录用户的项目,并提供包含downloadUrl的按钮以下载列表项。问题是我无法获得downloadUrl。
我在做的是:
1。请求GET /me/drive/sharedWithMe 此调用成功,响应通常与文档中的相同。 以下是回复的一部分:

object(stdClass)#3 (6) {
      ["@odata.type"]=>
      string(26) "#microsoft.graph.driveItem"
      ["createdDateTime"]=>
      string(20) "0001-01-01T00:00:00Z"
      ["id"]=>
      string(34) "01TWWV5W37UJKHFIUBZZBZDEHOJNVOEZVP"
      ["lastModifiedDateTime"]=>
      string(20) "2016-05-20T05:39:00Z"
      ["remoteItem"]=>
      object(stdClass)#4 (5) {
        ["file"]=>
        object(stdClass)#5 (0) {
        }
        ["id"]=>
        string(34) "01TWWV5W37UJKHFIUBZZBZDEHOJNVOEZVP"
        ["name"]=>
        string(7) "2NF.PNG"
        ["parentReference"]=>
        object(stdClass)#6 (1) {
          ["driveId"]=>
          string(66) "b!XxxqXZ1tqUGbTG6lCAZp8lCk94i3qvhJt1qf0GJTLQf11toCmqOoS4hkfSFKzG0F"
        }
        ["size"]=>
        int(0)
      }
      ["size"]=>
      int(0)
    }

从响应中我得到了" driveId"和" id"该项目。它们将在步骤2中使用。

2.请求GET /drives/<remoteItem.driveId>/items/<id>
这就是我获取downloadUrl的方法,但是这个调用给了我401 401 Unauthorized错误响应:

{"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":"Access denied. You do not have permission to perform this action or access this resource.","innerError":{"request-id":"64f90e20-92a4-4002-8833-da5de026c076","date":"2016-05-27T10:30:58"}}}


为了解决这个问题,我试图启用一些权限:Files.Read.All&amp; Sites.Read.All。
以下是我解码的access_token的一部分,以查看我所有已启用的权限

scp: "Calendars.ReadWrite Contacts.ReadWrite Directory.ReadWrite.All Files.Read Files.Read.All Files.ReadWrite Group.ReadWrite.All Mail.ReadWrite Mail.Send Sites.Read.All User.Read User.Read.All User.ReadWrite",


我在这里问的是:为什么它给我401未经授权的错误?以及如何解决它?

在此先感谢,对于那个漫长的水平代码部分和糟糕的英语,我感到抱歉。

2 个答案:

答案 0 :(得分:0)

通过sharedWithMe查找项目以引用项目时,您应该使用返回项目上的ID,而不是远程项目参考信息。

sharedWithMe返回的项目是OneDrive中实际项目的特殊隧道,其信息在remoteItem方面提供。

为了更好的可读性,这里是一个关于SharedWithMe返回的项目的示例json:

{
    "id": "DA5D51067000136E!303",
    "remoteItem": {
        "id": "8BF6000DBC6C4A4C!3275",
        "parentReference": {
            "driveId": "8bf6000dbc6c4a4c"
        }
    }
}

要检索项目信息的内容,请在默认驱动器上使用以下GET请求

GET /drive/items/DA5D51067000136E!303

答案 1 :(得分:0)

我在github中询问了microsoft graph api并在那里找到了我的答案。
这是link
导致401 Unauthorized错误的原因是我的用户帐户无法访问http://mytenant.sharepoint.com/ 现在已经给出了许可,我再次请求第2步。响应包含我需要的downloadUrl 谢谢你的回答,对不起,如果我花一点时间。

相关问题