使用仅限应用程序的令牌时,Microsoft Graph API / search()是否起作用

时间:2018-09-21 14:52:37

标签: microsoft-graph

我正在尝试使用图形API(v1.0)在我们团队的sharepoint / onedrive文件夹中搜索文件和文件夹,但是当使用仅应用程序令牌时,对于任何/search(...)请求,我始终无法获得任何结果我努力

我已经在https://apps.dev.microsoft.com进行了注册和申请,并且已经请求并同意API Documentation中所述的权限;

User.ReadWrite.AllGroup.Read.AllSites.Read.AllSites.ReadWrite.AllGroup.ReadWrite.AllSites.Manage.AllFiles.ReadWrite.AllUser.Read.AllFiles.Read.AllSites.FullControl.All

当我从https://login.microsoftonline.com/请求令牌时,可以在有效负载中看到授予的权限。

使用此令牌,我可以成功使用drive/root

访问驱动器并检索有关其内容的信息。

我有一个小的测试文件夹结构,其中包含一些简单的文本文件。

我可以通过递归调用drives/{driveid}/items/{folderid}/children来构建完整的树结构,从而确认此令牌是否可以访问我的文件和文件夹。

但是,当我尝试在驱动器中搜索我知道存在的文件名或文本短语时,无论使用何种路径或搜索词组合,我都不会获得任何结果。我从未见过来自仅应用令牌的搜索结果。

我尝试过的例子;

sites/root/drive/search(q='test')

drive/root/search(q='test')

drives/{driveid}/search(q='test')

drives/{driveid}/root/search(q='test')

短语“ test”既作为文件名也存在于某些文件的文本内容中。

我收到一个HTTP:200响应,但值集合https://graph.microsoft.com/v1.0/$metadata#Collection(driveItem)始终为空。

我在应用程序中建立http请求(Coldfusion),而不是使用SDK。 我想知道我是否遇到编码问题,因此尝试了各种方法来对url (q='test')的搜索部分进行url编码等。 我也尝试过用Postman和cUrl运行相同的请求,但结果是相同的。空的。

唯一有效的方法是,当我使用Graph Explorer尝试相同的搜索时,我得到了希望看到的结果。

我知道资源管理器使用不同类型的令牌,因此我想知道这是否是令牌以及与我的令牌相关的问题仅适用于应用程序。

有人知道.../search()是否真正适用于仅应用令牌吗?

2 个答案:

答案 0 :(得分:0)

  

有人知道... / search()是否真正适用于仅应用程序的令牌吗?

答案是肯定的,.. / search()实际上仅适用于应用专用令牌

根据我的测试,以下搜索API适用于仅应用程序令牌

https://graph.microsoft.com/v1.0/drive/root/microsoft.graph.search(q='test')

    https://graph.microsoft.com/v1.0/drives/{driveid}/root/microsoft.graph.search(q='test')

    https://graph.microsoft.com/v1.0/drives/{driveid}/microsoft.graph.search(q='test')

https://graph.microsoft.com/v1.0/sites/root/drive/search(q='test')

对于权限配置,只需将“ Files.Read.All,Files.ReadWrite.All,Sites.Read.All,Sites.ReadWrite.All ”放入项目配置文件中的GraphScopes中,如下所示: docs states

以上答案基于您的描述:****在http://apps.dev.microsoft.com/ 中注册应用。您可以忽略SDK,尽管它是最佳选择。如果没有使用GraphScopes的项目配置,则需要将范围传递给auth请求,操作起来很困难。

如果您的仅应用程序是指在SharePoint online 中注册应用程序,则Graph Search API将无法使用。 SharePoint不会直接与Graph共享AccessToken。

答案 1 :(得分:0)

Here再次是同一个问题。微软开发人员已经评论了答案。他确认,这是一个错误。