基于Azure AD B2C按域名注册账号,实现组织内新用户注册审批
实现Azure AD B2C同组织域名用户注册的审批管控
要实现你描述的同域名新用户注册需已有用户审批的需求,Azure AD B2C的内置用户流无法直接满足,必须通过自定义策略结合外部服务来完成。以下是具体的实现方案:
核心思路
在用户注册流程中,提取注册邮箱的域名,检查租户内是否已有该域名的已激活用户:
- 若没有该域名用户:允许正常完成注册
- 若已有该域名用户:阻止即时注册,将用户标记为待审批状态,通知该域名的已有用户完成审批,审批通过后再激活新用户账号
具体实现步骤
1. 扩展B2C用户属性
首先需要在Azure AD B2C租户中扩展用户属性,用于记录审批相关状态:
emailDomain:存储用户邮箱的域名(自动提取)approvalStatus:标记用户状态,可选值为Pending/Approved/RejectedapproverEmail:记录负责审批的该域名已有用户邮箱
2. 自定义策略中的域名检查逻辑
在自定义策略的用户旅程中添加以下关键步骤:
提取邮箱域名
使用Claims Transformation提取注册邮箱的域名,添加到用户声明中:
<ClaimsTransformation Id="ExtractEmailDomain" TransformationMethod="ExtractEmailDomain"> <InputClaims> <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputEmail" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="emailDomain" TransformationClaimType="outputDomain" /> </OutputClaims> </ClaimsTransformation>
查询该域名的已有用户
通过REST API调用(或直接调用Microsoft Graph API)查询B2C租户内是否存在该域名的已激活用户。示例REST API调用配置:
<TechnicalProfile Id="CheckExistingDomainUsers"> <DisplayName>Check if domain has existing users</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://your-api-endpoint.com/check-domain-users</Item> <Item Key="SendClaimsIn">Body</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="emailDomain" PartnerClaimType="domain" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="hasExistingUsers" PartnerClaimType="exists" /> <OutputClaim ClaimTypeReferenceId="approverEmail" PartnerClaimType="approver" /> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
你的API需要返回该域名是否有已激活用户,以及对应的审批人邮箱(比如取该域名第一个注册的用户)。
分支处理注册流程
在用户旅程中添加条件分支:
- 若
hasExistingUsers为false:继续执行正常注册流程,创建已激活用户 - 若
hasExistingUsers为true:创建状态为Pending的用户(accountEnabled设为false),然后触发审批通知
3. 审批流程实现
发送审批通知
使用Azure Logic Apps或Power Automate创建自动化流程:当B2C创建待审批用户时,发送邮件给approverEmail,包含审批链接(指向你构建的审批门户)。
审批门户开发
构建一个简单的Web门户,允许审批人登录(通过Azure AD B2C认证),查看待审批的注册请求,选择批准或拒绝:
- 批准:调用Graph API更新用户的
approvalStatus为Approved,并将accountEnabled设为true,同时通知新用户注册成功 - 拒绝:更新
approvalStatus为Rejected,通知新用户注册被拒绝
关键注意事项
- 自定义策略需要熟悉Azure AD B2C的Identity Experience Framework(IEF),建议先掌握基础自定义策略配置
- 调用Graph API时,需要为B2C租户配置对应的应用权限(
User.ReadWrite.All) - 待审批用户的账号需设置为禁用状态,避免未审批即可登录
- 审批流程需要处理超时、重复审批等边缘场景
内容的提问来源于stack exchange,提问作者silvergraphs
相关产品推荐
相关产品推荐

