如何在自定义B2C策略登录时去除signInName的前导零?
实现Azure AD B2C用户名去前导零的认证逻辑
要在认证前去除signInName的前导零,需通过**声明转换(Claim Transformation)**处理用户输入的用户名,再传递给验证流程,具体步骤如下:
1. 添加声明转换规则
在策略的<ClaimsTransformations>节点下,新增移除数字字符串前导零的转换定义:
<ClaimsTransformations> <ClaimsTransformation Id="RemoveLeadingZerosFromSignInName" TransformationMethod="RemoveLeadingCharacters"> <InputClaims> <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="CharactersToRemove" DataType="string" Value="0" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation> </ClaimsTransformations>
2. 修改自断言认证技术配置文件
在SelfAsserted-LocalAccountSignin-Username技术配置文件中,添加<OutputClaimsTransformations>节点,让用户提交用户名后立即执行去前导零操作:
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Username"> <!-- 保留原有配置内容 --> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInName" Required="true" /> <OutputClaim ClaimTypeReferenceId="password" Required="true" /> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" /> <OutputClaim ClaimTypeReferenceId="userPrincipalName" Required="true" /> </OutputClaims> <!-- 新增以下转换节点 --> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="RemoveLeadingZerosFromSignInName" /> </OutputClaimsTransformations> <!-- 保留原有验证和会话管理配置 --> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="login-NonInteractive" /> </ValidationTechnicalProfiles> <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" /> </TechnicalProfile>
3. 逻辑说明
- 用户输入的
signInName(如00001234)会先经过转换处理,去除所有前导零后变为1234,再传递给后续的login-NonInteractive验证流程。 - 若用户输入全零(如
000000),转换后会得到空字符串,此时因signInName为必填项,自断言页面会自动提示用户输入有效值,符合你要求的4-10位数字规则。
额外优化建议
确保signInName声明类型配置了数字格式验证,避免用户输入非数字字符:
<ClaimType Id="signInName"> <DisplayName>Username</DisplayName> <DataType>string</DataType> <UserInputType>TextBox</UserInputType> <Restriction> <Pattern RegularExpression="^[0-9]{4,10}$" HelpText="Username must be 4-10 digits." /> </Restriction> </ClaimType>
内容的提问来源于stack exchange,提问作者bperniciaro
相关产品推荐
相关产品推荐

