如何查询Azure AD Graph获取SignInName以定位用户对象?
解决Azure AD Graph中通过SignInName查询用户的问题
你猜的完全正确!问题根源就在于signInNames是一个集合类型的属性,而非单个值,直接用eq做等值匹配自然会触发那个错误。在Azure AD Graph里,针对集合类属性的过滤,必须用any操作符来遍历集合内的元素进行匹配。
正确的查询请求应该写成这样:
https://graph.windows.net/myB2Ctenant.onmicrosoft.com/users?api-version=1.6&$filter=signInNames/any(s:s/value eq 'spottedmahn')
给你拆解一下这个语法:
signInNames/any():表示要遍历signInNames集合中的每一个元素s:s/value eq 'spottedmahn':给集合里的元素起一个临时别名s,然后判断这个元素的value属性是否等于你要查找的登录名字符串
另外还有几个小细节要注意:
- 匹配的字符串值必须用单引号包裹
- 要确保你的请求拥有足够的权限(比如
User.Read.All这类用户读取权限) - 这个语法完全适配B2C租户场景,因为B2C用户的登录信息本来就存储在
signInNames集合中
赶紧试试这个请求,应该就能顺利定位到对应的用户对象了。
内容的提问来源于stack exchange,提问作者spottedmahn
相关产品推荐
相关产品推荐

