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

Azure B2C登录页无需+1国家码适配问题求助

解决方案

1. 添加声明转换逻辑

需要先区分输入的是邮箱还是纯数字手机号,仅对手机号自动追加+1国家码,添加以下声明转换:

1.1 判断输入是否为纯数字手机号

该转换检测signInName是否为10位纯数字,生成布尔类型声明IsPhoneNumber:

<ClaimsTransformation Id="IsSignInNamePhoneNumber" TransformationMethod="StringMatchesRegex">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="regex" DataType="string" Value="^\d{10}$" />
    <InputParameter Id="ignoreCase" DataType="boolean" Value="false" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="IsPhoneNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

1.2 条件追加国家码

通过ChooseClaimsTransformation根据IsPhoneNumber的值执行不同逻辑:手机号追加+1,邮箱直接复用原输入:

<ClaimsTransformation Id="AddCountryCodeConditionally" TransformationMethod="ChooseClaimsTransformation">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="IsPhoneNumber" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="trueClaimsTransformationId" DataType="string" Value="AddCountryCodeToPhone" />
    <InputParameter Id="falseClaimsTransformationId" DataType="string" Value="CopySignInNameAsIs" />
  </InputParameters>
</ClaimsTransformation>

<!-- 给手机号添加+1前缀 -->
<ClaimsTransformation Id="AddCountryCodeToPhone" TransformationMethod="FormatStringClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormat" DataType="string" Value="+1{0}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

<!-- 直接复制原输入(针对邮箱) -->
<ClaimsTransformation Id="CopySignInNameAsIs" TransformationMethod="CopyClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

2. 更新登录技术配置

替换原SelfAsserted-LocalAccountSignin-Email中的输入转换逻辑:

<!-- Main Sign in -->
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
  <Metadata>
    <Item Key="EnforceEmailVerification">False</Item>
    <Item Key="setting.showSignupLink">false</Item>
    <Item Key="setting.enableRememberMe">True</Item>
    <Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item>
  </Metadata>
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="IsSignInNamePhoneNumber" />
    <InputClaimsTransformation ReferenceId="AddCountryCodeConditionally" />
  </InputClaimsTransformations>

  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="extension_lastLogon" />
  </OutputClaims>

  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="Get-additional-claims" ContinueOnError="false" />
    <!-- Initiate a normal logon against Azure AD B2C -->
    <ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
  </ValidationTechnicalProfiles>

  <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>

3. 补充声明类型

在<ClaimsSchema>中添加IsPhoneNumber声明:

<ClaimType Id="IsPhoneNumber">
  <DisplayName>Is Phone Number</DisplayName>
  <DataType>boolean</DataType>
</ClaimType>

逻辑说明

  • 用户输入10位纯数字时,自动触发前缀添加逻辑,生成+1xxxxxxxxxx格式的手机号用于登录
  • 用户输入邮箱时,直接保留原输入内容,不做任何修改
  • 同时兼容两种登录方式,满足美国本土用户的使用习惯

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:15:23