微软图形AD用户或人员API中搜索所有用户?

5

我正在尝试为我的应用程序构建功能,让“管理员”将他们AD组中的用户分配到特定的组,并进一步分配给应用程序特定的角色。基本上是一个简单的管理组件。

将具有对象ID的用户添加到组中很容易,我面临的问题是找到实际用户。

目前,我看到的唯一选择是向v1.0/users发出多个API请求(最多999项),并将它们全部分组在内存中,然后提供一个简单的搜索函数来缩小范围。

我还使用了v1.0/me/people端点搜索用户,但这不会显示所有来自AD组的用户,只显示与其相关的用户,因此没有太大用处。

是否有其他API端点可以仅在同一活动目录的成员中进行搜索?

4个回答

8

目前在MS Graph中,使用startsWith过滤器在多个属性上进行搜索可能是我们最接近用户搜索的方法:

https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'sarah') or startswith(givenName,'sarah') or startswith(surname,'sarah') or startswith(mail,'sarah') or startswith(userPrincipalName,'sarah')


2
啊啊啊,没想到在图表上使用这样的搜索查询!本来就应该这么做的!!最后还是在AD图表上做了同样的事情。无论如何,我需要创建应用程序角色分配的能力,所以我想这样也可以。但你的解决方案肯定是MS Graph的正确方法。 - SebastianG
请注意:您可以使用https://developer.microsoft.com/en-us/graph/graph-explorer在线尝试MS Graph查询。 - Dmitry Pavlov
我需要哪些权限才能启用用户搜索功能? - aj go

4

最终我改用了旧的AD Graph API,并在端点上实现了以下查询:

https://graph.windows.net/{租户ID}/users?api-version=1.6&$select=mail,displayName,objectId,givenName,surname&$filter=startswith(givenName,'SEARCH TERM')或startswith(surname,'SEARCH TERM')

如果函数只接收一个参数,它将在givenName和surname中搜索该参数,但您可以配置它在任何其他支持的字段中进行搜索。

您还可以完全放弃$select=以获取所有数据。虽然我不想要冗杂的内容,但那些键对我来说已经足够了。



0

@Marcin已经在上面提到了,使用$search而不是$filter。根据Microsoft Graph API文档:使用$search获取包含{yourSearchTerm}的{searchField}用户,包括返回对象的计数

Microsoft Graph API文档

此外,您可以通过多个字段搜索用户。最近,我为我的组织构建了一个People Picker,并且以下查询完美地适用于我。

https://graph.microsoft.com/v1.0/users?$search="displayName:{yourSearchTerm}" OR "mail:{yourSearchTerm}" OR "userPrincipalName:{yourSearchTerm}"&$top=10&$count=true

上述查询基于 displayNamemailuserPrincipalName 搜索用户,并返回与 {yourSearchTerm} 匹配的前 10 个用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接