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

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

注意

此功能目前以公共预览版提供。

ConvertPhoneNumberClaimToString

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

元素 TransformationClaimType 数据类型 说明
InputClaim phoneNumber phoneNumber 要转换为字符串的声明。
OutputClaim phoneNumberString 字符串 调用此声明转换后生成的声明。

ConvertPhoneNumberClaimToString 示例

在此示例中,值类型为 phoneNumber 的 cellPhoneNumber 声明将转换为值类型为 string 的 cellPhone 声明。

<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 country 字符串 [可选] 电话号码的国家/地区代码的字符串声明采用 ISO3166 格式(由两个字母组成的 ISO-3166 国家/地区代码)。
OutputClaim outputClaim phoneNumber 此声明转换的结果。

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

Diagram of error message execution path

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
    • country: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 phoneNumber 字符串 电话号码的字符串声明。 电话号码必须采用国际格式,以“+”和国家/地区代码开头。
InputParameter throwExceptionOnFailure boolean [可选] 一个参数,指示电话号码无效时是否引发异常。 默认值为 false。
InputParameter countryCodeType 字符串 [可选] 一个参数,指示输出声明中国家/地区代码的类型。 可用值是 CallingCode(国家/地区的国际呼叫代码,例如 +1)或 ISO3166(由两个字母组成的 ISO-3166 国家/地区代码) 。
OutputClaim nationalNumber 字符串 电话号码的国家/地区号码的字符串声明。
OutputClaim countryCode 字符串 电话号码的国家/地区代码的字符串声明。

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

Diagram of error message execution path

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

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

带有 CallingCode 参数的 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="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>

后续步骤