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
相关产品推荐
相关产品推荐

