查询 OneDrive 中的文件将返回空列表



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

经过快速的谷歌搜索,似乎Microsoft图是要走的路。我从复制示例应用程序开始,一旦我确认基本功能正常工作(它显示了我的个人资料中的名称等)。我尝试添加一个简单的调用me/drive/root/children以列出根目录中的文件。而且我无法让它工作。

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

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

这个问题以前也发生在几个人身上,所以我试着跟着他们的小路走。到目前为止,我检查了:

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

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

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

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

同意新的权限,瞧!干得好女士。

更新权限后,用户和/或管理员必须再次同意。可以通过 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

最新更新