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

如何在自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:51:07