【问题标题】:OneDrive query returns empty arrayOneDrive 查询返回空数组
【发布时间】:2017-11-02 14:48:46
【问题描述】:

我目前正在开发一个使用 Microsoft Graph 在 Office 365 中访问 OneDrive 的解决方案。我正在使用adal4j 库来处理身份验证,并在portal.azure.com 中配置了应用程序。

我的问题与为指定驱动器获取孩子的调用有关。我正在使用类似于下面显示的查询,因为我想在指定用户驱动器的根级别获取文件夹和文件:

https://graph.microsoft.com/v1.0/users/*user id*/drives/*drive id*/root/children

当我登录到 Graph Explorer 并执行查询时,我得到一个 json 结果,显示驱动器和指定用户的根文件夹内容。一切正常。

当我从我的 java 应用程序中调用它时,JSON 节点 value 为空 ([])。

最初我的想法是,因为 Graph Explorer 在门户中使用不同的应用程序 ID,这可能与访问权限有关。但是,我成功读取了 O365 租户中的用户配置文件、每个用户的驱动器 ID,以及执行以下操作:

https://graph.microsoft.com/v1.0/users/*user id*/drives/*drive id*/root/search(q='')

它为我提供了相应用户驱动器中所有文件夹、子文件夹等的完整列表。

因此,让我认为这是我尝试使用的 Graph 查询的错误,而不是授权问题,但是,这并不能解释为什么它在 Graph Explorer 中有效。

所有调用都使用同一个java方法,url作为参数传入。

【问题讨论】:

  • 我的第一反应是它必须是权限,但在这种情况下,搜索工作会很奇怪。您能否使用jwt.ms 打开您的访问令牌并更新您的问题以包含scp 值?另外,调用者是相关驱动器的所有者吗?
  • 是的。这也是我的想法,但无法理解几乎所有其他呼叫如何正常工作。令牌 SCP 值是:- Directory.AccessAsUser.All User.Read User.ReadBasic.All
  • 好的,找到添加更多设置的地方。现在已将 scp 属性设置为 AllSites.Manage AllSites.Read AllSites.Write Directory.AccessAsUser.All Directory.Read.All Directory.ReadWrite.All Files.Read Files.Read.All Files.Read.Selected Files.ReadWrite Files。 ReadWrite.All Files.ReadWrite.AppFolder Files.ReadWrite.Selected MyFiles.Read MyFiles.Write offline_access openid Sites.Read.All User.Read User.ReadBasic.All。但是,当我在图中使用上述查询列出内容时,我得到了所有适当的子文件夹,但是,当我远程执行时,我只得到文档文件夹?

标签: microsoft-graph-api onedrive


【解决方案1】:

只是跟进,azure 门户应用程序权限具有为图形 api 添加权限的能力。这确实是问题所在。看起来搜索忽略了权限并成功读取了数据,而 /children 调用尊重了安全模型。这引起了很多混乱,但现在已经解决了。

感谢马克的帮助。

【讨论】:

    猜你喜欢
    • 2019-11-26
    • 2023-04-03
    • 2016-03-24
    • 2015-11-26
    • 2018-06-12
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多