Microsoft Graph /places API返回ID与/users接口结果不一致问题咨询
问题根因
Microsoft Graph 中place(包含会议室类型microsoft.graph.room)是独立于AAD目录对象的空间资源实体,其返回的id是该空间资源的专属标识,而会议室对应的资源邮箱属于AAD用户类目录实体,拥有独立的AAD对象ID,二者本身就不是同一个值,不属于接口异常。
解决方案
方案1:直接在places接口拉取关联的AAD对象ID,无需额外调用users接口
你调用/places接口查询会议室时,直接在$select参数中添加externalDirectoryObjectId字段即可,该字段的值就是对应资源邮箱在AAD中的ID,和/users接口返回的id完全一致。
调整后的请求示例:
https://graph.microsoft.com/v1.0/places/microsoft.graph.room?$top=2&$select=id,displayName,emailAddress,externalDirectoryObjectId
你可以直接通过该接口返回的结果构建「place ID - AAD用户ID - 邮箱」的三者映射,完全不需要再调用/users接口做匹配,既保留了places接口的查询速度优势,也解决了ID不匹配的问题。
方案2:WebHook通知匹配方案
如果你的WebHook通知携带的是资源邮箱的AAD ID,需要匹配对应的place资源,直接用externalDirectoryObjectId作为过滤条件查询places接口即可,示例请求:
https://graph.microsoft.com/v1.0/places/microsoft.graph.room?$filter=externalDirectoryObjectId eq '你收到的WebHook通知中的ID'&$select=id,displayName,emailAddress
该过滤查询在3000条数据量级下响应速度极快,不会有性能问题。
内容的提问来源于stack exchange,提问作者Tim H
相关产品推荐
相关产品推荐

