在OneDrive中查询文件返回空列表

时间:2019-07-17 12:24:19

标签: python microsoft-graph onedrive adal

我想创建一个简单的Python实用程序,以与OneDrive上的文件进行交互。现在,我正在使用公司帐户(因此,我无权访问管理员设置或对OneDrive / Sharepoint / Azure配置的任何详细了解)。

在快速谷歌搜索会话之后,Microsoft Graph似乎是必经之路。我从复制the sample app开始,一旦确认基本功能正常(它显示了我的个人资料中的名称,等等),我尝试向me/drive/root/children添加一个简单的调用以列出根目录中的文件目录。而且我无法使其正常工作。

无论我做什么,服务器都会返回以下内容:

{'@odata.context': "https://graph.microsoft.com/v1.0/$metadata#users('my_oid')/drive/root/children", 'value': []}

这个问题发生在few people之前,所以我试图追随他们的足迹。到目前为止,我已经检查过:

  • 应用程序似乎具有正确的静态权限:Files.ReadFiles.Read.AllFiles.ReadWriteFiles.ReadWrite.Allopenidprofile,{{1} } 乃至 User.Read
  • 这些权限不需要管理员的批准,所以我想它们应该起作用
  • Sites.ReadWrite.All返回正确的数据以及文件系统信息,等等。
  • me/drive/root/?expand=children返回正确的查询URL:me/drive/root/children?$whatif
  • 如果我在具有活动OneDrive会话的浏览器中打开此URL,它将返回JSON以及根文件夹中的文件列表(因此确实正确)
  • 使用https://{tenant}-my.sharepoint.com/personal/{username}/_api/v2.0/drive/root/children库进行访问并将adal添加到所有OAuth查询中(不变)。
  • 使用scope=files.readwrite.all查询(不变,/user/{oid}/drive/root/children建议将此映射到相同的共享点URL)

这些都不起作用。这里可能缺少什么?

编辑:缺少用户同意-我已经添加了权限,但是系统从未尝试登录后询问我有关更改的信息。评论中提供的解决方案有效-您只需要打开如下制作的URL:

?$whatif

同意新的权限,瞧! MS表现出色。

1 个答案:

答案 0 :(得分:1)

更新权限后,用户和/或管理员将不得不再次同意。您可以通过url请求强制用户同意,或者只需在Azure门户中单击“授予管理员同意按钮”。

https://login.microsoftonline.com/{tenant}/oauth2/authorize? client_id={your_client_id} &response_type=code &response_mode=query &resource=https://graph.microsoft.com &state=12345 &prompt=consent