在 Azure AD B2C 中定义电话号码声明转换

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。

本文提供了有关在 Azure Active Directory B2C (Azure AD B2C) 自定义策略中使用电话号码声明转换的参考和示例。 有关声明转换的详细信息,请参阅 ClaimsTransformations。

注释

此功能目前为公共预览版。

ConvertPhoneNumberClaimToString

将 phoneNumber 数据类型转换为 string 数据类型。 查看此声明转换的实时演示。

元素 TransformationClaimType 数据类型 注释
InputClaim 电话号码 电话号码 要转换为字符串的声明。
OutputClaim phoneNumberString 字符串 调用此声明转换后生成的声明。

ConvertPhoneNumberClaimToString 示例

在此示例中,具有值类型的 cellPhoneNumber 声明将转换为值为 的 手机声明。

<ClaimsTransformation Id="PhoneNumberToString" TransformationMethod="ConvertPhoneNumberClaimToString">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="cellPhoneNumber" TransformationClaimType="phoneNumber" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="cellPhone" TransformationClaimType="phoneNumberString" />
  </OutputClaims>
</ClaimsTransformation>
  • 输入声明:
    • phoneNumber: +11234567890 (phoneNumber)
  • 输出声明:
    • phoneNumberString: +11234567890 (string)

ConvertStringToPhoneNumberClaim

验证电话号码的格式。 如果有效,请将其更改为 Azure AD B2C 使用的标准格式。 如果提供的电话号码的格式无效,则返回错误消息。 查看此声明转换的实时演示。

元素 TransformationClaimType 数据类型 注释
InputClaim phoneNumberString 字符串 电话号码的字符串声明。 电话号码必须采用国际格式,以前导的“+”和国家/地区代码完成。 如果提供输入声明 country ,则电话号码采用本地格式(不含国家/地区代码)。
InputClaim 国家 字符串 [可选]电话号码的国家/地区代码的字符串声明ISO3166格式(双字母 ISO-3166 国家/地区代码)。
OutputClaim outputClaim 电话号码 此声明转换的结果。

ConvertStringToPhoneNumberClaim 声明转换始终从由自断言技术配置文件或显示控件调用的验证技术配置文件执行。 UserMessageIfClaimsTransformationInvalidPhoneNumber 自断言技术配置文件元数据控制向用户显示的错误消息。

错误消息执行路径示意图

ConvertStringToPhoneNumberClaim 的示例

以下示例检查 phoneString 声明是否确实是有效的电话号码,然后以标准 Azure AD B2C 格式返回电话号码。 否则,将引发错误消息。

<ClaimsTransformation Id="ConvertStringToPhoneNumber" TransformationMethod="ConvertStringToPhoneNumberClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneString" TransformationClaimType="phoneNumberString" />
    <InputClaim ClaimTypeReferenceId="countryCode" TransformationClaimType="country" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • 输入声明:
    • phoneNumberString: 033 456-7890
    • 国家/地区:DK
  • 输出声明:
    • outputClaim: +450334567890

没有国家/地区代码声明的 ConvertStringToPhoneNumberClaim 的示例

查看此声明转换模式的 实时演示 。

  • 输入声明:
    • phoneNumberString: +1 (123) 456-7890
  • 输出声明:
    • outputClaim:+11234567890

调用 ConvertStringToPhoneNumberClaim 声明转换

调用包含此声明转换的验证技术配置文件的自断言技术配置文件可以定义错误消息。

<TechnicalProfile Id="SelfAsserted-LocalAccountSignUp-Phone">
  <Metadata>
    <Item Key="UserMessageIfClaimsTransformationInvalidPhoneNumber">Custom error message if the phone number is not valid.</Item>
  </Metadata>
  ...
</TechnicalProfile>

GetNationalNumberAndCountryCodeFromPhoneNumberString

从输入声明中提取国家/地区代码和国家号码,如果提供的电话号码无效,可以选择引发异常。 查看此声明转换的实时演示。

元素 TransformationClaimType 数据类型 注释
InputClaim 电话号码 字符串 电话号码的字符串声明。 电话号码必须采用国际格式,以前导的“+”和国家/地区代码完成。
InputParameter throwExceptionOnFailure 布尔 [可选]一个参数,指示在电话号码无效时是否引发异常。 默认值为 false。
InputParameter countryCodeType 字符串 [可选]一个参数,指示输出声明中国家/地区代码的类型。 可用值为 CallingCode (国家/地区(例如 +1)或 ISO3166 (双字母 ISO-3166 国家/地区代码)。
OutputClaim nationalNumber 字符串 电话号码的全国号码的字符串声明。
OutputClaim countryCode (国家代码) 字符串 电话号码的国家/地区代码的字符串声明。

如果 GetNationalNumberAndCountryCodeFromPhoneNumberString 声明转换是从自断言技术配置文件或显示控件作调用的验证技术配置文件中执行的,则 UserMessageIfPhoneNumberParseFailure 自断言技术配置文件元数据控制向用户显示的错误消息。

错误消息执行路径示意图

可以使用此声明转换将完整的电话号码拆分为国家/地区代码和国家号码。 如果提供的电话号码无效,可以选择引发错误消息。

GetNationalNumberAndCountryCodeFromPhoneNumberString 的示例

以下示例尝试将电话号码拆分为国家号码和国家/地区代码。 如果电话号码有效,则电话号码将被国家号码覆盖。 如果电话号码无效,则不会引发异常,电话号码仍具有其原始值。

<ClaimsTransformation Id="GetNationalNumberAndCountryCodeFromPhoneNumberString" TransformationMethod="GetNationalNumberAndCountryCodeFromPhoneNumberString">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="phoneNumber" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="throwExceptionOnFailure" DataType="boolean" Value="false" />
    <InputParameter Id="countryCodeType" DataType="string" Value="ISO3166" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="nationalNumber" TransformationClaimType="nationalNumber" />
    <OutputClaim ClaimTypeReferenceId="countryCode" TransformationClaimType="countryCode" />
  </OutputClaims>
</ClaimsTransformation>
  • 输入声明:
    • phoneNumber: +49 (123) 456-7890
  • 输入参数:
    • throwExceptionOnFailure: false
    • countryCodeType:ISO3166
  • 输出声明:
    • nationalNumber: 1234567890
    • countryCode: DE

GetNationalNumberAndCountryCodeFromPhoneNumberString 和 CallingCode 参数的示例

以下示例尝试将电话号码拆分为国家号码和国家/地区呼叫代码。

<ClaimsTransformation Id="GetNationalNumberAndCountryCodeFromPhoneNumberString" TransformationMethod="GetNationalNumberAndCountryCodeFromPhoneNumberString">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="phoneNumber" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="throwExceptionOnFailure" DataType="boolean" Value="false" />
    <InputParameter Id="countryCodeType" DataType="string" Value="CallingCode" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="nationalNumber" TransformationClaimType="nationalNumber" />
    <OutputClaim ClaimTypeReferenceId="countryCode" TransformationClaimType="countryCode" />
  </OutputClaims>
</ClaimsTransformation>
  • 输入声明:
    • phoneNumber: +49 (123) 456-7890
  • 输入参数
    • throwExceptionOnFailure: false
    • countryCodeType:CallingCode
  • 输出声明:
    • nationalNumber: 1234567890
    • countryCode: +49

调用 GetNationalNumberAndCountryCodeFromPhoneNumberString 声明转换

调用包含此声明转换的验证技术配置文件的自断言技术配置文件可以定义错误消息。

<TechnicalProfile Id="SelfAsserted-LocalAccountSignup-Phone">
  <Metadata>
    <Item Key="UserMessageIfPhoneNumberParseFailure">Custom error message if the phone number is not valid.</Item>
  </Metadata>
  ...
</TechnicalProfile>

后续步骤