Microsoft graph api 使用仅应用程序令牌时,Microsoft Graph API/search()是否有效

Microsoft graph api 使用仅应用程序令牌时,Microsoft Graph API/search()是否有效,microsoft-graph-api,Microsoft Graph Api,我正在尝试使用graph API(v1.0)在我们团队的sharepoint/onedrive文件夹中搜索文件和文件夹,但在使用仅应用程序令牌时,对于我尝试的任何/search(…)请求,我始终没有得到任何结果 我有一份注册和申请,并已请求并同意本协议中所述的许可 User.ReadWrite.All,Group.Read.All,Sites.Read.All,Sites.ReadWrite.All,Group.ReadWrite.All,Sites.Manage.All,Files.Read.

我正在尝试使用graph API(v1.0)在我们团队的sharepoint/onedrive文件夹中搜索文件和文件夹,但在使用仅应用程序令牌时,对于我尝试的任何
/search(…)
请求,我始终没有得到任何结果

我有一份注册和申请,并已请求并同意本协议中所述的许可

User.ReadWrite.All
Group.Read.All
Sites.Read.All
Sites.ReadWrite.All
Group.ReadWrite.All
Sites.Manage.All
Files.Read.All
Files.Read.All
Sites.Read.All
Sites.FullControl.All

当我从中请求令牌时,我可以在有效负载中看到授予的权限

使用此令牌,我可以使用
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#集合(driveItem)
始终为空

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

唯一有效的方法是,当我使用Graph Explorer尝试相同的搜索时,我会得到预期的结果

我知道资源管理器使用不同类型的令牌,所以我想知道这是否是和我的令牌相关的问题,只是应用程序

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

有人知道…/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”作为一个选项放入项目配置文件的图形范围中

以上答案基于您的描述:***在中注册应用程序。您可以忽略SDK,尽管它是最佳选择。如果您没有带有GraphScopes的项目配置,则需要将作用域传递给auth请求,这将很难操作

如果您的应用程序仅表示在中注册应用程序,则图形搜索API将不起作用。SharePoint不直接与Graph共享AccessToken

有人知道…/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”作为一个选项放入项目配置文件的图形范围中

以上答案基于您的描述:***在中注册应用程序。您可以忽略SDK,尽管它是最佳选择。如果您没有带有GraphScopes的项目配置,则需要将作用域传递给auth请求,这将很难操作


如果您的应用程序仅表示在中注册应用程序,则图形搜索API将不起作用。SharePoint不直接与Graph共享AccessToken。

也是同样的问题。答案已经被微软的一位开发者评论过了。他证实,这是一个bug。

又是同一个问题。答案已经被微软的一位开发者评论过了。他证实,这是一个bug。

我不知道为什么有些坏人不经测试就直接投票否决。这个答案是基于测试而不是基于猜测/假设。我认为答案是好的。如果您还可以为每个查询添加应用模式权限所需的作用域,我将向上投票answer@DoguArslan请更新我的答案。我不确定您是否需要除这四个关键权限之外的其他权限。@SeiyaSu谢谢您的帮助。我尝试了你的建议,但仍然没有得到任何搜索结果。顺便问一下,您是从哪里获得microsoft.graph.search的?文档仅说明了
搜索
。我发现并评论了一个类似的问题,现在它被标记为一个bug。如果您看到响应,您将使用microsoft.graph.search找到元数据查询字符串。我不确定是否总是这样,但根据测试和研究,microsoft.graph.search应该与search相同。我不知道为什么有些坏人不经测试就直接投票否决。这个答案是基于测试而不是基于猜测/假设。我认为答案是好的。如果您还可以为每个查询添加应用模式权限所需的作用域,我将向上投票answer@DoguArslan请更新我的答案。我不确定您是否需要除这四个关键权限之外的其他权限。@SeiyaSu谢谢您的帮助。我已经试过你的建议了,但我仍然很满意