重要
自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息。
本文提供了有关在 Azure Active Directory B2C (Azure AD B2C) 自定义策略中使用电话号码声明转换的参考和示例。 有关声明转换的详细信息,请参阅 ClaimsTransformations。
备注
此功能目前为公共预览版。
将 phoneNumber
数据类型转换为 string
数据类型。 查看此声明转换的实时演示。
元素 | TransformationClaimType | 数据类型 | 注释 |
---|---|---|---|
InputClaim | 电话号码 | 电话号码 | 要转换为字符串的声明。 |
OutputClaim | phoneNumberString | 字符串 | 调用此声明转换后生成的声明。 |
在此示例中,具有值类型的
<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)
验证电话号码的格式。 如果有效,请将其更改为 Azure AD B2C 使用的标准格式。 如果提供的电话号码的格式无效,则返回错误消息。 查看此声明转换的实时演示。
元素 | TransformationClaimType | 数据类型 | 注释 |
---|---|---|---|
InputClaim | phoneNumberString | 字符串 | 电话号码的字符串声明。 电话号码必须采用国际格式,以前导的“+”和国家/地区代码完成。 如果提供输入声明 country ,则电话号码采用本地格式(不含国家/地区代码)。 |
InputClaim | 国家 | 字符串 | [可选]电话号码的国家/地区代码的字符串声明ISO3166格式(双字母 ISO-3166 国家/地区代码)。 |
OutputClaim | outputClaim | 电话号码 | 此声明转换的结果。 |
ConvertStringToPhoneNumberClaim 声明转换始终从由自断言技术配置文件或显示控件调用的验证技术配置文件执行。 UserMessageIfClaimsTransformationInvalidPhoneNumber 自断言技术配置文件元数据控制向用户显示的错误消息。
以下示例检查 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
查看此声明转换模式的 实时演示 。
- 输入声明:
- phoneNumberString: +1 (123) 456-7890
- 输出声明:
- outputClaim:+11234567890
调用包含此声明转换的验证技术配置文件的自断言技术配置文件可以定义错误消息。
<TechnicalProfile Id="SelfAsserted-LocalAccountSignUp-Phone">
<Metadata>
<Item Key="UserMessageIfClaimsTransformationInvalidPhoneNumber">Custom error message if the phone number is not valid.</Item>
</Metadata>
...
</TechnicalProfile>
从输入声明中提取国家/地区代码和国家号码,如果提供的电话号码无效,可以选择引发异常。 查看此声明转换的实时演示。
元素 | TransformationClaimType | 数据类型 | 注释 |
---|---|---|---|
InputClaim | 电话号码 | 字符串 | 电话号码的字符串声明。 电话号码必须采用国际格式,以前导的“+”和国家/地区代码完成。 |
InputParameter | throwExceptionOnFailure | 布尔 | [可选]一个参数,指示在电话号码无效时是否引发异常。 默认值为 false。 |
InputParameter | countryCodeType | 字符串 | [可选]一个参数,指示输出声明中国家/地区代码的类型。 可用值为 CallingCode (国家/地区(例如 +1)或 ISO3166 (双字母 ISO-3166 国家/地区代码)。 |
OutputClaim | nationalNumber | 字符串 | 电话号码的全国号码的字符串声明。 |
OutputClaim | countryCode (国家代码) | 字符串 | 电话号码的国家/地区代码的字符串声明。 |
如果 GetNationalNumberAndCountryCodeFromPhoneNumberString 声明转换是从自断言技术配置文件或显示控件作调用的验证技术配置文件中执行的,则 UserMessageIfPhoneNumberParseFailure 自断言技术配置文件元数据控制向用户显示的错误消息。
可以使用此声明转换将完整的电话号码拆分为国家/地区代码和国家号码。 如果提供的电话号码无效,可以选择引发错误消息。
以下示例尝试将电话号码拆分为国家号码和国家/地区代码。 如果电话号码有效,则电话号码将被国家号码覆盖。 如果电话号码无效,则不会引发异常,电话号码仍具有其原始值。
<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
以下示例尝试将电话号码拆分为国家号码和国家/地区呼叫代码。
<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
调用包含此声明转换的验证技术配置文件的自断言技术配置文件可以定义错误消息。
<TechnicalProfile Id="SelfAsserted-LocalAccountSignup-Phone">
<Metadata>
<Item Key="UserMessageIfPhoneNumberParseFailure">Custom error message if the phone number is not valid.</Item>
</Metadata>
...
</TechnicalProfile>
- 在 Azure AD B2C 社区 GitHub 存储库中查看更多声明转换示例