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

使用Graph API读取Azure B2C自定义属性遇问题求助

解决方案

1. 先确认自定义属性的正确Graph API名称

Azure B2C里的自定义用户属性,在Graph API里的名称格式是固定的:extension_{b2c-extensions-app的客户端ID(去掉所有横杠)}_{属性名}

  • 找到你B2C租户里那个叫b2c-extensions-app. Do not modify. Used by AADB2C for storing user data.的应用,复制它的客户端ID,然后把里面的所有-删掉
  • 比如原客户端ID是a1b2c3d4-5678-90ef-ghij-klmnopqrstuv,去掉横杠后变成a1b2c3d4567890efghijklmnopqrstuv,那你的IsAdmin属性对应的Graph API名称就是extension_a1b2c3d4567890efghijklmnopqrstuv_IsAdmin

2. 查询单个用户时显式指定要获取的自定义属性

Graph API默认只返回用户的核心属性,自定义扩展属性得通过$select参数明确指定才能拿到,修改你的代码:

var user = await graphClient.Users["{USER-GUID}"]
    .Request()
    // 把需要的核心属性和自定义属性列在这里
    .Select("id, displayName, extension_<去掉横杠的客户端ID>_IsAdmin")
    .GetResponseAsync();

3. 筛选用户时的两个关键点

用对属性名称

筛选语句里必须用完整的扩展属性名称,同时别忘了加上$select来返回该属性:

var results = await graphClient.Users
    .Request()
    .Select("id, displayName, extension_<去掉横杠的客户端ID>_IsAdmin")
    .Filter("extension_<去掉横杠的客户端ID>_IsAdmin eq true")
    .GetAsync();

确保权限足够

你的应用必须拥有Application类型的Directory.Read.All权限,而且已经完成了管理员同意。如果用的是Delegated类型的User.Read.All权限,没法支持扩展属性的筛选操作。

4. 回头验证用户创建时的属性设置

确认你当初用Graph API创建用户时,是用正确的扩展属性名称来设置IsAdmin值的,比如:

var user = new User
{
    AccountEnabled = true,
    DisplayName = "Admin User",
    MailNickname = "adminuser",
    UserPrincipalName = "admin@yourb2ctenant.onmicrosoft.com",
    PasswordProfile = new PasswordProfile
    {
        ForceChangePasswordNextSignIn = false,
        Password = "YourStrongPassword123!"
    },
    AdditionalData = new Dictionary<string, object>
    {
        {"extension_<去掉横杠的客户端ID>_IsAdmin", true}
    }
};

await graphClient.Users
    .Request()
    .AddAsync(user);

内容的提问来源于stack exchange,提问作者Stephen H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:35:38