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

如何在B2C自定义策略中提取API响应的id并映射到输出声明?

在Azure AD B2C自定义策略中提取REST API返回数组内的ID

要提取API返回数组中的id并映射到输出声明,需要通过声明定义、输出映射和声明转换三步实现,具体配置如下:

1. 定义所需声明

在<ClaimsSchema>节点下添加三个声明:一个用于接收API返回的数组,一个临时存储数组的单个元素,最后一个存储最终提取出的id:

<ClaimsSchema>
  <!-- 接收API返回的value数组 -->
  <ClaimType Id="restApiValueArray">
    <DisplayName>REST API Value Array</DisplayName>
    <DataType>collection</DataType>
  </ClaimType>
  <!-- 临时存储数组的单个元素 -->
  <ClaimType Id="restApiSingleItem">
    <DisplayName>Single Item from REST API Array</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
  <!-- 存储最终提取的id -->
  <ClaimType Id="extractedId">
    <DisplayName>Extracted ID</DisplayName>
    <DataType>string</DataType>
  </ClaimType>
</ClaimsSchema>

2. 配置REST API技术配置文件的输出映射

在调用REST API的Technical Profile中,将API返回的value字段映射到数组类型的声明:

<TechnicalProfile Id="MyRestApiProfile">
  <DisplayName>Call Target REST API</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ServiceUrl">https://your-api-endpoint-url</Item>
    <Item Key="AuthenticationType">None</Item>
    <Item Key="SendClaimsIn">Body</Item>
  </Metadata>
  <OutputClaims>
    <!-- 映射API返回的value数组到声明 -->
    <OutputClaim ClaimTypeReferenceId="restApiValueArray" PartnerClaimType="value" />
  </OutputClaims>
</TechnicalProfile>

3. 添加声明转换提取ID

创建一个用于转换的Technical Profile,结合两个声明转换:先提取数组的第一个元素,再从该元素中解析出id字段:

声明转换定义

<ClaimsTransformations>
  <!-- 提取数组的第一个元素 -->
  <ClaimsTransformation Id="GetFirstArrayItem" TransformationMethod="GetSingleItemFromCollectionClaim">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="restApiValueArray" TransformationClaimType="collection" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="restApiSingleItem" TransformationClaimType="collectionItem" />
    </OutputClaims>
  </ClaimsTransformation>

  <!-- 从单个元素的JSON中提取id字段 -->
  <ClaimsTransformation Id="ExtractIdFromJsonItem" TransformationMethod="GetClaimFromJson">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="restApiSingleItem" TransformationClaimType="inputJson" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="extractedId" TransformationClaimType="claimToExtract" />
    </OutputClaims>
    <InputParameters>
      <InputParameter Id="claimToExtract" DataType="string" Value="id" />
    </InputParameters>
  </ClaimsTransformation>
</ClaimsTransformations>

转换用Technical Profile

<TechnicalProfile Id="ExtractIdFromApiResponse">
  <DisplayName>Extract ID from REST API Array Response</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="extractedId" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="GetFirstArrayItem" />
    <OutputClaimsTransformation ReferenceId="ExtractIdFromJsonItem" />
  </OutputClaimsTransformations>
</TechnicalProfile>

4. 在用户旅程中按顺序调用

确保先调用REST API的技术配置文件,再调用转换用的配置文件,保证数组数据已存在后再执行提取:

<UserJourney Id="YourUserJourneyId">
  <OrchestrationSteps>
    <!-- 其他业务步骤... -->
    <OrchestrationStep Order="N" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="CallRestApi" TechnicalProfileReferenceId="MyRestApiProfile" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <OrchestrationStep Order="N+1" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="ExtractId" TechnicalProfileReferenceId="ExtractIdFromApiResponse" />
      </ClaimsExchanges>
    </OrchestrationStep>
    <!-- 后续步骤可直接使用extractedId声明... -->
  </OrchestrationSteps>
</UserJourney>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:23