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

如何在SelfAsserted-LocalAccountSignin-Email中传参至自定义验证配置文件及AD查询传参至REST API

解决方法

针对你提出的两个需求,我会分别给出具体的配置步骤,都是基于Azure AD B2C自定义策略的常规操作:


1. 将额外输入传递至SelfAsserted-LocalAccountSignin-Email的自定义验证配置文件

要实现这个需求,核心是在自定义策略中声明额外的Claim,并在各个环节传递:

  • 步骤1:定义额外的ClaimType
    在TrustFrameworkExtensions.xml中添加你需要的额外字段声明,比如一个名为extension_extraInput的文本输入:

    <BuildingBlocks>
      <ClaimsSchema>
        <ClaimType Id="extension_extraInput">
          <DisplayName>额外输入字段</DisplayName>
          <DataType>string</DataType>
          <UserInputType>TextBox</UserInputType>
          <UserHelpText>请输入额外信息</UserHelpText>
        </ClaimType>
      </ClaimsSchema>
    </BuildingBlocks>
    
  • 步骤2:在SelfAsserted-LocalAccountSignin-Email中添加输入声明
    修改这个技术配置文件,把额外Claim加入到用户输入和输入声明列表中,让用户能在登录页面输入这个字段:

    <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="extension_extraInput" />
      </InputClaims>
      <UserInputClaims>
        <UserInputClaim ClaimTypeReferenceId="extension_extraInput" />
      </UserInputClaims>
      <!-- 保留原有配置 -->
    </TechnicalProfile>
    
  • 步骤3:在自定义验证配置文件中接收这个Claim
    不管你的自定义验证是用REST API还是自定义代码,只要在验证技术配置文件的<InputClaims>里包含这个Claim,就能拿到用户输入的值:

    <TechnicalProfile Id="Your-Custom-Validation-TP">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="extension_extraInput" />
        <!-- 其他需要的Claim,比如用户名、密码 -->
      </InputClaims>
      <!-- 保留原有配置 -->
    </TechnicalProfile>
    

2. 将额外参数(用户输入/AD字段)传递至REST API验证配置文件

这里分两种场景处理:

场景A:传递用户输入的额外参数

这个其实是需求1的延伸,只需要在REST API的技术配置文件中映射这些额外Claim到API的参数即可:

<TechnicalProfile Id="REST-Signin-Validation">
  <DisplayName>登录验证REST API</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine" />
  <Metadata>
    <Item Key="ServiceUrl">https://your-api-domain.com/api/validate-signin</Item>
    <Item Key="SendClaimsIn">Body</Item>
  </Metadata>
  <InputClaims>
    <!-- 用户名和密码映射 -->
    <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="username" />
    <InputClaim ClaimTypeReferenceId="password" PartnerClaimType="password" />
    <!-- 额外输入字段映射 -->
    <InputClaim ClaimTypeReferenceId="extension_extraInput" PartnerClaimType="extra_input" />
  </InputClaims>
  <!-- 其他配置(比如输出Claim、错误处理) -->
</TechnicalProfile>

这样当调用这个REST API时,用户输入的额外值会以extra_input参数的形式发送到API接口。

场景B:从AD查询额外字段并传递

如果需要从AD获取用户的额外属性(比如部门、职位)并传给REST API,需要调整验证流程的顺序:

  • 步骤1:确保AD属性已映射到Claim
    在TrustFrameworkBase.xml或Extensions.xml的AAD技术配置文件中,添加需要查询的AD属性对应的输出Claim。比如要获取用户的部门:

    <TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="department" />
        <!-- 保留原有输出Claim -->
      </OutputClaims>
    </TechnicalProfile>
    

    注意:department这个ClaimType需要提前在<ClaimsSchema>中定义。

  • 步骤2:调整验证流程顺序
    在SelfAsserted-LocalAccountSignin-Email的<ValidationTechnicalProfiles>中,先调用AAD的登录验证(读取用户AD属性),再调用REST API:

    <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
      <ValidationTechnicalProfiles>
        <!-- 先验证用户名密码,同时读取AD属性 -->
        <ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
        <!-- 再调用REST API,此时AD属性已经在Claim集合中 -->
        <ValidationTechnicalProfile ReferenceId="REST-Signin-Validation" />
      </ValidationTechnicalProfiles>
    </TechnicalProfile>
    
  • 步骤3:在REST API配置中添加AD属性的输入Claim
    回到REST API的技术配置文件,添加AD属性对应的输入Claim映射:

    <InputClaims>
      <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="username" />
      <InputClaim ClaimTypeReferenceId="password" PartnerClaimType="password" />
      <InputClaim ClaimTypeReferenceId="department" PartnerClaimType="user_department" />
    </InputClaims>
    

    这样REST API就能收到从AD查询到的用户部门信息了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:21:18