查询 OneDrive returns 空列表中的文件
Query for files in OneDrive returns empty list
我想创建一个简单的 Python 实用程序来与 OneDrive 上的文件进行交互。现在我正在使用我的公司帐户(因此我无法访问管理设置或对 OneDrive/Sharepoint/Azure 配置的任何详细了解)。
经过快速谷歌搜索后,Microsoft Graph 似乎是最佳选择。我从复制 the sample app 开始,一旦我验证了基本功能正常工作(它显示了我个人资料中的名称等),我尝试添加一个简单的调用 me/drive/root/children
以列出根目录中的文件目录。而且我无法让它工作。
无论我做什么,服务器 returns 如下:
{'@odata.context': "https://graph.microsoft.com/v1.0/$metadata#users('my_oid')/drive/root/children", 'value': []}
这个问题发生在few people之前,所以我尝试按照他们的路径进行。到目前为止,我检查过:
- 应用程序具有看似正确的静态权限:
Files.Read
、Files.Read.All
、Files.ReadWrite
、Files.ReadWrite.All
、openid
、profile
、User.Read
甚至
Sites.ReadWrite.All
- 这些权限不需要管理员的批准,所以我想它们应该可以工作
me/drive/root/?expand=children
returns 正确的文件系统信息等数据
me/drive/root/children?$whatif
returns 正确 URL 查询:https://{tenant}-my.sharepoint.com/personal/{username}/_api/v2.0/drive/root/children
- 如果我在具有活动 OneDrive 会话的浏览器中打开此 URL 它 returns JSON 包含根文件夹中的文件列表(所以它确实是正确的)
- 使用
adal
库并将 scope=files.readwrite.all
添加到所有 OAuth 查询(无变化)。
- 使用
/user/{oid}/drive/root/children
查询(没有变化,?$whatif
建议这映射到相同的共享点 URL)
None 这行得通。这里可能缺少什么?
编辑:缺少的是用户同意 - 我已经添加了权限,但系统在登录尝试后从未询问过我有关更改的信息。评论中提供的解决方案有效 - 你只需要打开 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
同意新权限,瞧!干得好女士
更新权限后,用户 and/or 管理员必须同意 again.You 可以通过 url 请求强制用户同意,或者只需在 Azure 门户中单击 'grant admin consent button'。
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
我想创建一个简单的 Python 实用程序来与 OneDrive 上的文件进行交互。现在我正在使用我的公司帐户(因此我无法访问管理设置或对 OneDrive/Sharepoint/Azure 配置的任何详细了解)。
经过快速谷歌搜索后,Microsoft Graph 似乎是最佳选择。我从复制 the sample app 开始,一旦我验证了基本功能正常工作(它显示了我个人资料中的名称等),我尝试添加一个简单的调用 me/drive/root/children
以列出根目录中的文件目录。而且我无法让它工作。
无论我做什么,服务器 returns 如下:
{'@odata.context': "https://graph.microsoft.com/v1.0/$metadata#users('my_oid')/drive/root/children", 'value': []}
这个问题发生在few people之前,所以我尝试按照他们的路径进行。到目前为止,我检查过:
- 应用程序具有看似正确的静态权限:
Files.Read
、Files.Read.All
、Files.ReadWrite
、Files.ReadWrite.All
、openid
、profile
、User.Read
甚至Sites.ReadWrite.All
- 这些权限不需要管理员的批准,所以我想它们应该可以工作
me/drive/root/?expand=children
returns 正确的文件系统信息等数据me/drive/root/children?$whatif
returns 正确 URL 查询:https://{tenant}-my.sharepoint.com/personal/{username}/_api/v2.0/drive/root/children
- 如果我在具有活动 OneDrive 会话的浏览器中打开此 URL 它 returns JSON 包含根文件夹中的文件列表(所以它确实是正确的)
- 使用
adal
库并将scope=files.readwrite.all
添加到所有 OAuth 查询(无变化)。 - 使用
/user/{oid}/drive/root/children
查询(没有变化,?$whatif
建议这映射到相同的共享点 URL)
None 这行得通。这里可能缺少什么?
编辑:缺少的是用户同意 - 我已经添加了权限,但系统在登录尝试后从未询问过我有关更改的信息。评论中提供的解决方案有效 - 你只需要打开 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
同意新权限,瞧!干得好女士
更新权限后,用户 and/or 管理员必须同意 again.You 可以通过 url 请求强制用户同意,或者只需在 Azure 门户中单击 'grant admin consent button'。
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