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

如何实现B2C Custom Policy登录时校验case ref、Ni Number自定义属性

Azure AD B2C 自定义策略校验方案

完全可以通过内置的技术验证配置文件(Technical Validation Profile)实现你需要的用户属性校验逻辑,无需调用外部API,具体实现步骤如下:

前置准备

你已经完成了预创建带自定义属性的用户步骤,只需确保自定义属性在策略的ClaimsSchema节点中正确声明即可,示例声明如下:

<ClaimsSchema>
  <ClaimType Id="extension_CaseReference">
    <DisplayName>Case Reference</DisplayName>
    <DataType>string</DataType>
    <UserInputType>TextBox</UserInputType>
  </ClaimType>
  <ClaimType Id="extension_NiNumber">
    <DisplayName>NI Number</DisplayName>
    <DataType>string</DataType>
    <UserInputType>TextBox</UserInputType>
  </ClaimType>
  <!-- 额外声明用户输入用的临时字段 -->
  <ClaimType Id="inputCaseReference">
    <DisplayName>Case Reference</DisplayName>
    <DataType>string</DataType>
    <UserInputType>TextBox</UserInputType>
  </ClaimType>
  <ClaimType Id="inputNiNumber">
    <DisplayName>NI Number</DisplayName>
    <DataType>string</DataType>
    <UserInputType>TextBox</UserInputType>
  </ClaimType>
</ClaimsSchema>

步骤1:修改自断言登录页配置

在你的登录页对应的自断言技术配置文件中,新增三个必填输入项,同时添加校验流程:

<TechnicalProfile Id="SelfAsserted-Login">
  <DisplayName>Login Page</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ContentDefinitionReferenceId">api.selfasserted.login</Item>
    <!-- 关闭注册入口 -->
    <Item Key="SignUpTarget">None</Item>
  </Metadata>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="signInName" DisplayName="Email" Required="true" />
    <OutputClaim ClaimTypeReferenceId="inputCaseReference" DisplayName="Case Reference" Required="true" />
    <OutputClaim ClaimTypeReferenceId="inputNiNumber" DisplayName="NI Number" Required="true" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <!-- 第一步:通过用户输入的邮箱读取租户内存储的用户属性 -->
    <ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="extension_CaseReference" />
        <OutputClaim ClaimTypeReferenceId="extension_NiNumber" />
      </OutputClaims>
    </ValidationTechnicalProfile>
    <!-- 第二步:比对用户输入值和租户存储的属性值 -->
    <ValidationTechnicalProfile ReferenceId="Assert-UserAttributesMatch" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>

步骤2:编写属性比对技术配置文件

新增断言技术配置文件,使用内置的声明转换完成值比对,不匹配时直接抛出错误:

<TechnicalProfile Id="Assert-UserAttributesMatch">
  <DisplayName>Validate Case Reference and NI Number</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <OutputClaimsTransformations>
    <!-- 比对Case Reference -->
    <OutputClaimsTransformation ReferenceId="CheckCaseReferenceMatch" />
    <!-- 比对NI Number -->
    <OutputClaimsTransformation ReferenceId="CheckNiNumberMatch" />
  </OutputClaimsTransformations>
</TechnicalProfile>

对应的声明转换示例:

<ClaimsTransformation Id="CheckCaseReferenceMatch" TransformationMethod="AssertStringClaimsAreEqual">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="inputCaseReference" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="extension_CaseReference" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringComparison" DataType="string" Value="OrdinalIgnoreCase" />
    <InputParameter Id="throwErrorIfNotEqual" DataType="boolean" Value="true" />
    <InputParameter Id="errorMessage" DataType="string" Value="Case Reference does not match our records." />
  </InputParameters>
</ClaimsTransformation>
<!-- 复制上述逻辑修改字段名即可完成NI Number的比对配置 -->

注意事项

  • 确保你的B2C策略服务主体已被授予用户读取权限,否则无法拉取用户的自定义属性
  • 自定义属性的extension_前缀后的字符串要和你租户中注册应用的应用ID(去掉短横线)一致,否则无法正确读取属性
  • 所有错误提示可通过Localization节点自定义本地化文案

内容的提问来源于stack exchange,提问作者72GM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:04