Azure B2C Graph API如何过滤数组属性signInNames包含指定值
解决Azure B2C AD Graph查询中过滤signInNames数组的问题
我来帮你搞定这个需求——你当前用的是Azure AD Graph API(graph.windows.net),要针对signInNames这种数组类型的属性添加过滤条件,核心是用API支持的any操作符来实现集合元素的条件检查。
实现思路
Azure AD Graph API允许使用any操作符遍历集合(数组)中的元素,并检查是否存在至少一个元素满足指定条件。针对你的场景:
signInNames是一个包含多个对象的数组,每个对象有value属性- 我们需要检查数组中是否存在任意一个元素的
value以'test'开头,对应的表达式是:signInNames/any(s: startswith(s/value, 'test'))- 这里的
s是集合元素的别名,你可以替换成任意合法名称(比如item),只要前后一致即可
- 这里的
完整查询语句
把这个新条件用or和你原有的过滤规则拼接,最终的查询URL如下(已做好URL编码):
https://graph.windows.net/myTenant/users?$filter=startswith(displayName,'test')%20or%20startswith(givenName,'test')%20or%20startswith(surname,'test')%20or%20startswith(mail,'test')%20or%20startswith(userPrincipalName,'test')%20or%20signInNames/any(s:%20startswith(s/value,'test'))&api-version=1.6
补充说明
- 如果你需要的是精确匹配而非前缀匹配,只需把
startswith替换成eq即可,比如:signInNames/any(s: s/value eq 'test@mail.com') - 你使用的
api-version=1.6完全支持any操作符,无需升级API版本 - 这个逻辑仅针对Azure AD Graph API有效;如果后续迁移到Microsoft Graph API(
graph.microsoft.com),语法会略有不同,但核心的any思路是类似的
内容的提问来源于stack exchange,提问作者Felix Gerber
相关产品推荐
相关产品推荐

