Microsoft Graph API中用户与人员关联及身份区分技术问询
解决方案:用Microsoft Graph API区分真实人员、会议室与群组
我之前也碰到过类似的需求,不用纠结People端点的限制,直接通过users端点结合筛选就能搞定,下面是具体的思路和方法:
一、获取组织内所有真实人员
People端点的/me/people本质是当前用户的联系人聚合,没法直接拿到整个组织的所有人员。反而/v1.0/users端点更适合做目录级别的查询,结合筛选条件就能精准定位真实人员:
- 真实人员通常是组织内的成员或外部访客,所以可以用
userType筛选,再加上accountEnabled确保账户是激活状态:GET https://graph.microsoft.com/v1.0/users?$filter=userType eq 'Member' and accountEnabled eq true&$select=id,displayName,userPrincipalName,givenName,surname - 如果你需要排除外部访客,把
userType eq 'Member'单独保留就行;如果要包含访客,改成userType in ('Member', 'Guest')。
二、区分会议室(资源账户)
会议室属于资源账户,它们在用户列表里,但有独特的标识:
- 这类账户的
resourceProvisioningOptions属性会包含'Room'(会议室)或'Equipment'(设备),可以用这个来筛选:GET https://graph.microsoft.com/v1.0/users?$filter=resourceProvisioningOptions/any(x:x eq 'Room')&$select=id,displayName,userPrincipalName - 另外,会议室的
displayName通常会带有“会议室”“Room”这类关键词,但靠名称判断不如用resourceProvisioningOptions可靠。
三、区分群组
要注意:群组和用户是Graph API里的两种不同对象类型,users端点不会返回群组数据。如果要区分用户和群组,需要单独调用groups端点获取群组列表:
GET https://graph.microsoft.com/v1.0/groups?$select=id,displayName,mailNickname
之后你可以通过对象类型(用户有userPrincipalName,群组有mailNickname等属性)来区分两者。
总结
不用依赖People端点,通过users和groups端点的组合查询,再结合属性筛选,就能完美区分真实人员、会议室和群组。这种方法比People端点更直接,也更符合目录数据的查询逻辑。
内容的提问来源于stack exchange,提问作者shtrule
相关产品推荐
相关产品推荐

