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

Azure B2C如何通过自定义策略限制未获管理员审批的用户登录

Azure AD B2C 自定义策略实现用户审批拦截及问题解决

一、基于自定义isApproved声明拦截未审批用户登录的实现步骤

    1. 首先在策略的ClaimsSchema节点中声明与注册流程一致的自定义声明,注意B2C存储的扩展属性默认带有extension_前缀,示例配置如下:
<ClaimType Id="extension_isApproved">
  <DisplayName>Is Account Approved</DisplayName>
  <DataType>boolean</DataType>
  <AdminHelpText>Marks whether the user account has passed administrator review</AdminHelpText>
</ClaimType>
    1. 在登录流程的用户读取技术配置文件(通常为AAD-UserReadUsingObjectId)中添加输出声明,读取用户的extension_isApproved属性:
<OutputClaim ClaimTypeReferenceId="extension_isApproved" />
    1. 新增声明转换规则,校验extension_isApproved的值是否为true:
<ClaimsTransformation Id="AssertAccountApproved" TransformationMethod="AssertBooleanClaimIsEqualToValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="extension_isApproved" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="valueToCompareTo" DataType="boolean" Value="true" />
  </InputParameters>
</ClaimsTransformation>
    1. 新增校验用技术配置文件,校验不通过时抛出指定的错误提示:
<TechnicalProfile Id="CheckAccountApproval">
  <DisplayName>Account Approval Check</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertAccountApproved" />
  </OutputClaimsTransformations>
  <Metadata>
    <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">your account is under review please try again once the account is approved</Item>
  </Metadata>
</TechnicalProfile>
    1. 在用户旅程的登录流程中添加校验步骤,步骤顺序放在用户身份验证完成、用户属性读取完成之后,令牌颁发之前:
<OrchestrationStep Order="对应你的流程实际顺序" Type="ClaimsExchange">
  <ClaimsExchanges>
    <ClaimsExchange Id="AccountApprovalCheckExchange" TechnicalProfileReferenceId="CheckAccountApproval" />
  </ClaimsExchanges>
</OrchestrationStep>

二、注册时设置accountEnabled为false返回账户锁定错误的解决方法

问题原因

默认注册流程在创建用户后会自动执行登录逻辑,此时你设置accountEnabled为false,系统会判定禁用账户尝试登录,直接抛出账户锁定的错误。

解决方案

  • 如果需要保留accountEnabled控制逻辑:修改注册用户旅程,拆分用户创建和自动登录环节,创建用户设置accountEnabled=false后,直接返回注册成功提示,不触发后续自动登录步骤。
  • 如果需要注册后自动登录:放弃使用accountEnabled实现审批拦截逻辑,改用上述自定义isApproved声明的方案即可。
  • 如果需要保留自动登录且使用accountEnabled:在注册流程的用户创建步骤后新增判断逻辑,若accountEnabled为false直接跳转至审批中提示页面,不进入后续登录鉴权环节。

内容的提问来源于stack exchange,提问作者Muhammad Magdy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:27:03