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

Azure B2C自定义策略中如何拆分StringCollection类型声明?

解决方案:Azure B2C自定义策略中拆分StringCollection声明

Azure B2C内置的StringCollection类型声明转换确实没有直接支持批量拆分的操作,要实现将一个大的StringCollection拆分为多个固定元素数的子集合,最可行的方案是借助自定义REST API ClaimTransformation来完成,以下是具体实现步骤:

1. 编写拆分逻辑的REST API

你需要开发一个简单的REST服务,接收两个核心参数:

  • 原始的StringCollection声明值(比如myclaim对应的数组)
  • 每个子集合允许的最大元素数N

API的核心逻辑是将输入数组按每N个元素一组拆分,生成多个子数组,再以键值对形式返回,键名采用myclaim_0、myclaim_1这类格式。

示例API逻辑(C#伪代码)

[HttpPost]
public IActionResult SplitStringCollection([FromBody] SplitRequest request)
{
    var result = new Dictionary<string, string[]>();
    var items = request.MyClaim;
    int batchSize = request.BatchSize;

    for (int i = 0; i < items.Length; i += batchSize)
    {
        var batch = items.Skip(i).Take(batchSize).ToArray();
        result.Add($"myclaim_{i/batchSize}", batch);
    }

    return Ok(result);
}

public class SplitRequest
{
    public string[] MyClaim { get; set; }
    public int BatchSize { get; set; }
}

2. 在Azure B2C自定义策略中配置REST API集成

2.1 添加RESTful技术配置

在策略的<ClaimsProviders>节点下添加REST API的访问配置,务必做好安全校验(比如使用API密钥):

<ClaimsProvider>
  <DisplayName>REST API Split StringCollection</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="REST-SplitStringCollection">
      <DisplayName>Split StringCollection into batches</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-domain.com/api/SplitStringCollection</Item>
        <Item Key="AuthenticationType">ApiKey</Item>
        <Item Key="SendClaimsIn">Body</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="ApiKey" StorageReferenceId="B2C_1A_RestApiKey" />
      </CryptographicKeys>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="myclaim" PartnerClaimType="MyClaim" />
        <InputClaim ClaimTypeReferenceId="batchSize" PartnerClaimType="BatchSize" DefaultValue="2" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="myclaim_0" PartnerClaimType="myclaim_0" />
        <OutputClaim ClaimTypeReferenceId="myclaim_1" PartnerClaimType="myclaim_1" />
        <OutputClaim ClaimTypeReferenceId="myclaim_2" PartnerClaimType="myclaim_2" />
        <!-- 根据预估的最大拆分数量,提前定义足够多的输出声明 -->
      </OutputClaims>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

2.2 声明类型定义

在<BuildingBlocks>的<ClaimsSchema>节点中,定义输入和输出的声明类型:

<ClaimsSchema>
  <ClaimType Id="myclaim">
    <DisplayName>Original StringCollection</DisplayName>
    <DataType>stringCollection</DataType>
  </ClaimType>
  <ClaimType Id="batchSize">
    <DisplayName>Batch Size per Collection</DisplayName>
    <DataType>int</DataType>
  </ClaimType>
  <ClaimType Id="myclaim_0">
    <DisplayName>Split Collection 0</DisplayName>
    <DataType>stringCollection</DataType>
  </ClaimType>
  <ClaimType Id="myclaim_1">
    <DisplayName>Split Collection 1</DisplayName>
    <DataType>stringCollection</DataType>
  </ClaimType>
  <ClaimType Id="myclaim_2">
    <DisplayName>Split Collection 2</DisplayName>
    <DataType>stringCollection</DataType>
  </ClaimType>
  <!-- 按需添加更多拆分后的声明类型 -->
</ClaimsSchema>

2.3 在用户旅程中添加转换步骤

在用户旅程的<UserJourney>节点下,找到合适的步骤(比如获取上游OIDC声明之后、发送给下游应用之前),添加调用上述REST技术配置的步骤:

<UserJourney Id="SignUpOrSignIn">
  <!-- 其他已有的流程步骤 -->
  <OrchestrationStep Order="X" Type="ClaimsExchange">
    <ClaimsExchanges>
      <ClaimsExchange Id="SplitStringCollectionExchange" TechnicalProfileReferenceId="REST-SplitStringCollection" />
    </ClaimsExchanges>
  </OrchestrationStep>
  <!-- 后续发送声明给下游应用的步骤 -->
</UserJourney>

3. 关键注意事项

  • 声明数量预估:需要根据原始StringCollection的最大可能元素数,提前定义足够多的输出声明(比如如果最多有10个元素、每个子集合2个,就需要定义到myclaim_4),避免数据遗漏。
  • API安全:务必配置API密钥或IP白名单,确保只有Azure B2C可以调用你的REST API,防止未授权访问。
  • 错误处理:可以在REST技术配置中添加<Metadata>项配置错误处理策略,比如<Item Key="AllowInsecureAuthInProduction">false</Item>,以及设置RetryPolicy应对临时网络问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:11:11