Microsoft Graph AD 用户或人员 API 来搜索所有用户?

问题描述 投票:0回答:5

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

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

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

我还使用了 v1.0/me/people 端点来搜索用户,但这并没有显示 AD 组中的所有用户,只是显示他们处理的相关用户,所以不太有用。

我可以利用任何其他 api 端点来仅对同一活动目录的成员进行搜索吗?

active-directory azure-active-directory microsoft-graph-api
5个回答
8
投票

对多个属性使用startsWith过滤器可能是目前我们在MS Graph中可以实现的最接近用户搜索的方法:

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')


4
投票

最终切换到旧的 AD Graph API 并在端点上实现查询,如下所示:

https://graph.windows.net/{ 租户 ID }/users?api-version=1.6&$select=mail,displayName,objectId,givenName,surname&$filter=startswith(givenName,'搜索词')或开头为(姓氏,'搜索词')

如果函数接收 1 个单个参数,它将在给定名称和姓氏中搜索该参数,但您可以将其配置为跨任何其他支持的字段进行搜索。

您也可以完全放弃 $select= 来获取整个数据。不过我不想乱七八糟,这些钥匙对我来说已经足够了。



0
投票

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

Microsoft Docs for Graph API

此外,您还可以通过多个字段搜索用户。最近,我正在为我的组织构建一个人员选择器,以下查询非常适合我。

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

上面根据 displayNamemailuserPrincipalName 查询搜索用户,并返回与 {yourSearchTerm} 匹配的前 10 用户。


0
投票

微软自己的人员查找器(mgt-people-picker 组件)已内置此功能。在幕后,它使用邮件属性,因此只有您的组织用户包含在搜索中。

https://graph.microsoft.com/v1.0/users?$count=true&$search=%22displayName:name%22%20OR%20%22mail:name%22&$top=6

© www.soinside.com 2019 - 2024. All rights reserved.