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

Azure AD B2C 如何区分自主注册管理员与管理员创建的普通用户

Azure AD B2C 区分两类用户的实操方案

核心逻辑是通过B2C自定义用户属性+令牌声明注入实现无额外接口调用的权限判断,全程不需要修改应用的核心权限逻辑,具体步骤如下:

1. 新增自定义用户标识属性

进入你的Azure AD B2C租户管理页,找到「用户属性」模块,新增一个布尔类型的自定义属性,命名为IsRootAdmin,默认值设为false,这个属性就是两类用户的核心区分标识。

2. 给自注册用户自动打管理员标

根据你使用的身份验证配置类型调整:

  • 如果你用的是预置用户流:打开当前使用的自注册用户流,先在「用户属性」设置中勾选IsRootAdmin,再在「应用声明」设置中勾选IsRootAdmin,保证该属性会被注入到签发的ID/访问令牌中;最后修改自注册页配置,把IsRootAdmin字段设为隐藏,固定默认值为true,用户自注册时会自动赋值,且无法自行修改。
  • 如果你用的是自定义策略(IEF):在用户创建对应的技术配置文件中添加声明赋值逻辑,自注册流程自动将IsRootAdmin设为true,同时在依赖方策略的返回声明列表中添加该属性即可。

3. 管理员创建普通用户时固定标识值

你通过Microsoft Graph创建普通用户时,请求体中固定给自定义属性赋值为false即可。注意B2C自定义属性的命名规则是extension_{B2C应用客户端ID(去掉横杠)}_IsRootAdmin,替换成你自己的B2C应用客户端ID就行。
参考请求片段:

{
  "accountEnabled": true,
  "displayName": "普通用户",
  "mailNickname": "normaluser",
  "passwordProfile": {
    "forceChangePasswordNextSignIn": true,
    "password": "自定义初始密码"
  },
  "identities": [
    {
      "signInType": "emailAddress",
      "issuer": "你的B2C租户域名",
      "issuerAssignedId": "user@example.com"
    }
  ],
  "extension_1234567890abcdef1234567890abcdef_IsRootAdmin": false
}

4. 应用侧直接判断权限

用户登录成功后,应用直接解析ID令牌或者访问令牌中的IsRootAdmin声明即可:

  • 值为true:自主注册的根管理员
  • 值为false:管理员创建的普通用户

补充可选方案:如果不想新增自定义属性,也可以在用户登录时调用Graph API查询用户的createdBy字段,值为系统主体的是自注册管理员,值为其他用户主体的是管理员创建的普通用户,但该方案需要额外调用接口,性能不如内置声明方案,仅适合小体量应用使用。

内容的提问来源于stack exchange,提问作者Muqaddas Mehmood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:36:04