You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成Microsoft Graph API过滤查询以筛选Azure AD B2C中的演示用户扩展属性?

解决Azure AD B2C目录扩展属性的Graph API过滤问题

我来帮你搞定这个过滤查询的问题——你的核心问题是对Azure AD B2C的目录扩展属性在Graph API中的访问方式理解有误,之前的Filter语法不适用这类属性。

问题根源

你创建的extensions_{b2cextensionappid}_IsDemoAccount属于目录扩展属性(Directory Extension),这类属性会直接成为用户对象的顶级属性,而不是嵌套在Extensions集合里的开放扩展(Open Extension)。所以你不需要用Extensions/any(...)这种针对集合的语法,直接使用完整的属性名称即可。

另外要注意:扩展属性名称里的{b2cextensionappid}需要去掉所有连字符,比如原App ID是123e4567-e89b-12d3-a456-426614174000,要改成123e4567e89b12d3a456426614174000。

正确的代码实现

下面是修正后的完整代码示例:

// 1. 获取你的B2C扩展应用ID(来自配置),并移除所有连字符
var extensionAppId = config.Value.B2CExtensionAppId;
var cleanExtensionAppId = extensionAppId.Replace("-", string.Empty);

// 2. 构造完整的扩展属性名称
var demoAccountProperty = $"extensions_{cleanExtensionAppId}_IsDemoAccount";

// 3. 执行过滤查询
var result = await graphClient.Users
    .Request()
    .Filter($"{demoAccountProperty} eq true")
    .Select($"id, displayName, {demoAccountProperty}") // 可选:指定要返回的属性,减少响应大小
    .GetAsync();

关键注意事项

  • 权限要求:确保你的API应用已经被授予User.Read.All或Directory.Read.All的应用权限(Delegated权限也可以,但应用权限更适合后台API场景),并且完成了管理员同意。
  • 属性同步:如果是刚创建的扩展属性,需要至少有一个用户被设置过这个属性,Graph API才会识别它并允许过滤。
  • 避免Expand:目录扩展属性不需要用Expand("Extensions"),因为它本身就是用户对象的一部分,直接访问即可。

为什么之前的写法不生效?

你之前用的Extensions/any(...)是针对开放扩展(比如通过graphClient.Users[id].Extensions创建的自定义扩展)的语法,这类扩展是作为独立的集合资源存在的,和你创建的目录扩展不是同一类型,所以语法不兼容。

内容的提问来源于stack exchange,提问作者Saravana Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 03:22:46