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

B2C自定义策略声明转换:如何将输出声明设为stringCollection?

问题描述

需要从身份提供商(IdP)获取stringCollection类型的组声明,根据用户的组成员身份为其分配一个或多个角色,最终输出hooli.roles为stringCollection类型(作为列表使用)。但检查了SetClaimIfBooleansMatch、SetClaimsIfRegexMatch、SetClaimsIfStringsMatch等转换方法,均不支持直接输出stringCollection类型声明。目前尝试的两步转换流程只能生成string类型的hooli.roles,无法满足列表需求。

尝试的转换代码如下:

<ClaimType Id="groups">
  <DisplayName>Security groups</DisplayName>
  <DataType>stringCollection</DataType>
  <DefaultPartnerClaimTypes>
    <Protocol Name="SAML2" PartnerClaimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/groups" />
  </DefaultPartnerClaimTypes>
</ClaimType>

<ClaimType Id="hooli.role.analyst">
  <DisplayName>Hooli Role - Analyst</DisplayName>
  <DataType>boolean</DataType>
</ClaimType>

<ClaimType Id="hooli.roles">
  <DisplayName>Hooli Roles</DisplayName>
  <DataType>string</DataType>
</ClaimType>

<!-- Step #1 -->
     <ClaimsTransformation Id="SethooliRole.Analyst" TransformationMethod="StringCollectionContains">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="groups" TransformationClaimType="inputClaim" />
        </InputClaims>
        <InputParameters>
          <InputParameter Id="item" DataType="string" Value="Analyst Group" />
          <InputParameter Id="ignoreCase" DataType="string" Value="true" />
        </InputParameters>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="hooli.role.analyst" TransformationClaimType="outputClaim" />
        </OutputClaims>
      </ClaimsTransformation> 

<!-- Step #2 -->      
      <ClaimsTransformation Id="ishooliRole.Analyst" TransformationMethod="SetClaimIfBooleansMatch">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="hooli.role.analyst" TransformationClaimType="claimToMatch" />
        </InputClaims>
        <InputParameters>
          <InputParameter Id="matchTo" DataType="string" Value="true" />
          <InputParameter Id="outputClaimIfMatched" DataType="string" Value="Analyst" />
        </InputParameters>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="hooli.roles" TransformationClaimType="outputClaim" />
        </OutputClaims>
      </ClaimsTransformation>
可行解决方案

你没有遗漏核心转换方法,只需结合AddItemToStringCollection就能实现多角色的集合输出,具体步骤如下:

1. 修改声明类型定义

首先将hooli.roles的DataType改为stringCollection:

<ClaimType Id="hooli.roles">
  <DisplayName>Hooli Roles</DisplayName>
  <DataType>stringCollection</DataType>
</ClaimType>

2. 添加集合转换步骤

在原有的组判断转换后,新增使用AddItemToStringCollection的转换逻辑——当boolean角色声明为true时,将对应角色值添加到hooli.roles集合中。如果有多个角色(比如Admin组),重复这套逻辑即可。

完整转换示例(包含Analyst和Admin两个角色):

<!-- 声明类型定义 -->
<ClaimType Id="groups">
  <DisplayName>Security groups</DisplayName>
  <DataType>stringCollection</DataType>
  <DefaultPartnerClaimTypes>
    <Protocol Name="SAML2" PartnerClaimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/groups" />
  </DefaultPartnerClaimTypes>
</ClaimType>

<ClaimType Id="hooli.role.analyst">
  <DisplayName>Hooli Role - Analyst</DisplayName>
  <DataType>boolean</DataType>
</ClaimType>

<ClaimType Id="hooli.role.admin">
  <DisplayName>Hooli Role - Admin</DisplayName>
  <DataType>boolean</DataType>
</ClaimType>

<ClaimType Id="hooli.roles">
  <DisplayName>Hooli Roles</DisplayName>
  <DataType>stringCollection</DataType>
</ClaimType>

<!-- 步骤1:判断用户是否属于Analyst组 -->
<ClaimsTransformation Id="SetHooliRole_Analyst" TransformationMethod="StringCollectionContains">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="groups" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="item" DataType="string" Value="Analyst Group" />
    <InputParameter Id="ignoreCase" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="hooli.role.analyst" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

<!-- 步骤2:判断用户是否属于Admin组 -->
<ClaimsTransformation Id="SetHooliRole_Admin" TransformationMethod="StringCollectionContains">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="groups" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="item" DataType="string" Value="Admin Group" />
    <InputParameter Id="ignoreCase" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="hooli.role.admin" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

<!-- 步骤3:如果是Analyst,添加角色到集合 -->
<ClaimsTransformation Id="AddAnalystRoleToCollection" TransformationMethod="AddItemToStringCollection">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="hooli.roles" TransformationClaimType="collection" />
    <InputClaim ClaimTypeReferenceId="hooli.role.analyst" TransformationClaimType="flag" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="item" DataType="string" Value="Analyst" />
    <InputParameter Id="checkDuplicates" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="hooli.roles" TransformationClaimType="collection" />
  </OutputClaims>
</ClaimsTransformation>

<!-- 步骤4:如果是Admin,添加角色到集合 -->
<ClaimsTransformation Id="AddAdminRoleToCollection" TransformationMethod="AddItemToStringCollection">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="hooli.roles" TransformationClaimType="collection" />
    <InputClaim ClaimTypeReferenceId="hooli.role.admin" TransformationClaimType="flag" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="item" DataType="string" Value="Admin" />
    <InputParameter Id="checkDuplicates" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="hooli.roles" TransformationClaimType="collection" />
  </OutputClaims>
</ClaimsTransformation>

3. 配置转换执行顺序

在用户旅程(User Journey)的ClaimsTransformation步骤中,按如下顺序执行:

  • 先执行所有组判断转换(SetHooliRole_Analyst、SetHooliRole_Admin)
  • 再执行所有集合添加转换(AddAnalystRoleToCollection、AddAdminRoleToCollection)

这样就能确保符合条件的角色都会被添加到hooli.roles这个stringCollection集合中,最终输出多角色列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:47:33