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

Azure B2C自定义策略:MFA重试限制与账号锁定配置咨询

自定义登录旅程MFA配置与账号锁定方案

现有疑问解答

1. 电话呼叫MFA的取消/重试逻辑

  • 默认流程下,未接听或输入错误密钥后,系统会自动挂断并返回对应错误码(如invalid_code、call_failed)。若要实现取消或重试,需在自定义用户旅程中添加自定义步骤:
    • 在呼叫发起页面添加「取消」按钮,触发旅程分支跳转回MFA方式选择页。
    • 重试逻辑通过策略中的ClaimsExchange和UserJourney分支实现,允许用户在呼叫失败后重新发起请求,而非直接返回错误。

2. SMS MFA的限额与失败次数配置

  • 开发租户的SMS发送限额属于免费套餐限制,生产租户会根据订阅配额提升上限。
  • 会话内失败尝试次数需在对应SMS验证的**技术配置文件(Technical Profile)**中修改:
    找到PhoneFactor-InputOrVerify节点,添加重试限制参数及自定义错误提示:
    <TechnicalProfile Id="PhoneFactor-InputOrVerify">
      <Metadata>
        <Item Key="RetryLimit">5</Item>
        <Item Key="UserMessageIfMaxAllowedCodeRetryReached">短信验证码重试次数已达上限,请稍后再试。</Item>
      </Metadata>
    </TechnicalProfile>
    

3. Email MFA的错误尝试次数配置

  • 内置邮箱验证的错误次数可配置。在对应Email验证的技术配置文件(如EmailVerification-InputVerifyCode)中,通过Metadata节点设置RetryLimit参数:
    <TechnicalProfile Id="EmailVerification-InputVerifyCode">
      <Metadata>
        <Item Key="RetryLimit">5</Item>
      </Metadata>
    </TechnicalProfile>
    

统一失败次数限制与账号锁定实现方案

1. 跟踪MFA失败次数

通过**会话声明(Session Claim)**跟踪每种MFA方式的失败次数:

  • 为三种MFA方式分别定义声明:phoneMfaFailedCount、smsMfaFailedCount、emailMfaFailedCount。
  • 每次验证失败时,通过ClaimsTransformation递增对应声明数值:
    <ClaimsTransformation Id="IncrementPhoneMfaFailedCount" TransformationMethod="AddIntegerClaim">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="phoneMfaFailedCount" TransformationClaimType="inputClaim" />
      </InputClaims>
      <InputParameters>
        <InputParameter Id="add" DataType="int" Value="1" />
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="phoneMfaFailedCount" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
    

2. 触发锁定与日志记录

当失败次数达到5次时,执行以下操作:

  • 显示错误信息:在对应技术配置文件中通过UserMessageIfMaxAllowedCodeRetryReached配置提示文案。
  • 调用后端API记录日志:使用RestfulProvider技术配置文件发起POST请求,传递用户ID、MFA方式、失败次数等信息:
    <TechnicalProfile Id="LogMfaLockout">
      <DisplayName>Log MFA Lockout Event</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-backend-api.com/log-mfa-lockout</Item>
        <Item Key="AuthenticationType">None</Item>
        <Item Key="SendClaimsIn">Body</Item>
      </Metadata>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="objectId" />
        <InputClaim ClaimTypeReferenceId="mfaMethod" />
        <InputClaim ClaimTypeReferenceId="failedCount" />
      </InputClaims>
    </TechnicalProfile>
    
  • 24小时账号锁定:通过ClaimsTransformation生成锁定到期时间(当前时间+24小时),并存储到用户目录扩展属性extension_mfaLockoutUntil中。同时在用户旅程起始步骤添加验证逻辑,若属性未过期则阻止登录:
    <ClaimsTransformation Id="CalculateLockoutExpiry" TransformationMethod="AddHoursToDateTime">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="currentDateTime" TransformationClaimType="inputClaim" />
      </InputClaims>
      <InputParameters>
        <InputParameter Id="hoursToAdd" DataType="int" Value="24" />
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="extension_mfaLockoutUntil" TransformationClaimType="outputClaim" />
      </OutputClaims>
    </ClaimsTransformation>
    

3. 整合到用户旅程

在自定义用户旅程的MFA验证步骤中添加分支判断:

  • 每次验证失败后,递增对应失败次数声明,判断是否达到5次。
  • 达到次数上限时,调用日志API、设置锁定时间,跳转至错误页面;未达到则允许用户重试。

内容的提问来源于stack exchange,提问作者Erkan Y.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:35:16