Azure B2C SMS OTP验证问题:iPhone无提交按钮+美国区号不生效
Azure B2C SMS OTP验证配置问题修复方案
问题1:自定义美国国家区号未生效 + 验证按钮未加载
核心原因
你当前使用的PhoneFactorProtocolProvider会强制渲染Azure B2C内置的电话验证UI,直接忽略了自定义的VerificationControl显示控件,导致自定义国家下拉选项和验证按钮无法正常加载。
修复步骤
- 替换技术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>
- 添加默认国家代码声明转换
新增声明转换确保countryCode默认值为US,避免下拉选项出现其他国家:
<ClaimsTransformation Id="SetDefaultCountryCode" TransformationMethod="CreateStringClaim"> <InputParameters> <InputParameter Id="value" DataType="string" Value="US" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="countryCode" TransformationClaimType="createdClaim" /> </OutputClaims> </ClaimsTransformation>
- 确保号码合并逻辑正确
检查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
相关产品推荐
相关产品推荐

