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

Azure B2C SMS OTP验证问题:iPhone无提交按钮+美国区号不生效

Azure B2C SMS OTP验证配置问题修复方案

问题1:自定义美国国家区号未生效 + 验证按钮未加载

核心原因

你当前使用的PhoneFactorProtocolProvider会强制渲染Azure B2C内置的电话验证UI,直接忽略了自定义的VerificationControl显示控件,导致自定义国家下拉选项和验证按钮无法正常加载。

修复步骤

  1. 替换技术Profile协议为SelfAsserted
    将PhoneFactor-InputOrVerify技术Profile改为使用SelfAssertedAttributeProvider,这样才能加载自定义显示控件:
<TechnicalProfile Id="PhoneFactor-InputOrVerify">
    <DisplayName>PhoneFactor</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        <Item Key="ContentDefinitionReferenceId">api.phonefactor</Item>
        <Item Key="UserMessageIfClaimsTransformationInvalidPhoneNumber">Invalid phone number.</Item>
        <Item Key="showCancelButton">false</Item>
    </Metadata>
    <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="CreateUserIdForMFA" />
        <InputClaimsTransformation ReferenceId="SetDefaultCountryCode" />
    </InputClaimsTransformations>
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="userIdForMFA" PartnerClaimType="UserId" />
        <InputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" />
        <InputClaim ClaimTypeReferenceId="countryCode" DefaultValue="US" />
    </InputClaims>
    <DisplayClaims>
        <DisplayClaim DisplayControlReferenceId="phoneVerificationControl-Custom" />
    </DisplayClaims>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" />
        <OutputClaim ClaimTypeReferenceId="newPhoneNumberEntered" />
        <OutputClaim ClaimTypeReferenceId="extension_mfaPhoneContactInformation" />
    </OutputClaims>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-MFA-Phone" />
</TechnicalProfile>
  1. 添加默认国家代码声明转换
    新增声明转换确保countryCode默认值为US,避免下拉选项出现其他国家:
<ClaimsTransformation Id="SetDefaultCountryCode" TransformationMethod="CreateStringClaim">
    <InputParameters>
        <InputParameter Id="value" DataType="string" Value="US" />
    </InputParameters>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="countryCode" TransformationClaimType="createdClaim" />
    </OutputClaims>
</ClaimsTransformation>
  1. 确保号码合并逻辑正确
    检查CombineCountryCodeAndNationalNumber技术Profile,确保它能正确将国家代码和手机号合并为Azure MFA所需的格式:
<TechnicalProfile Id="CombineCountryCodeAndNationalNumber">
    <DisplayName>Combine Country Code and Phone Number</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="countryCode" />
        <InputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" />
    </InputClaims>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" />
    </OutputClaims>
    <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="CombineCountryCodeAndPhoneNumber" />
    </OutputClaimsTransformations>
</TechnicalProfile>

对应的声明转换:

<ClaimsTransformation Id="CombineCountryCodeAndPhoneNumber" TransformationMethod="FormatStringClaim">
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="countryCode" TransformationClaimType="inputClaim1" />
        <InputClaim ClaimTypeReferenceId="Verified.strongAuthenticationPhoneNumber" TransformationClaimType="inputClaim2" />
    </InputClaims>
    <InputParameters>
        <InputParameter Id="stringFormat" DataType="string" Value="+{0}{1}" />
    </InputParameters>
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="strongAuthenticationPhoneNumber" TransformationClaimType="outputClaim" />
    </OutputClaims>
</ClaimsTransformation>

问题2:iPhone粘贴验证码无法自动提交

修复说明

修改为自定义VerificationControl后,验证按钮会正常加载,用户粘贴验证码后可手动点击按钮触发验证流程,直接解决iPhone上的自动提交失效问题。

额外检查点

  • 确保api.phonefactor对应的内容定义使用最新版本模板(如urn:com:microsoft:aad:b2c:elements:contract:phonefactor:2.1.0)
  • 确认AzureMfa-SendSms和AzureMfa-VerifySms技术Profile正确接收合并后的strongAuthenticationPhoneNumber声明

内容的提问来源于stack exchange,提问作者Trae Moore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:31:13