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

Azure AD B2C自定义策略中如何引入"字符实现声明转换检查

Azure AD B2C自定义策略:检查字符串集合是否包含指定子串(含引号转义)

核心要点:引号的XML转义

在Azure AD B2C自定义策略的XML配置中,双引号(")必须转义为",所以你要匹配的目标子串/"id/" /"guid/",在配置里需要写成:/"id/" /"guid/"

实现步骤:声明转换配置

1. 定义所需声明类型

首先在<ClaimsSchema>中声明用到的集合、临时结果和最终结果类型:

<ClaimsSchema>
  <!-- 你的源字符串集合 -->
  <ClaimType Id="MyStringCollection">
    <DisplayName>源字符串集合</DisplayName>
    <DataType>stringCollection</DataType>
  </ClaimType>
  <!-- 临时存储单个元素的匹配结果 -->
  <ClaimType Id="IsMatch">
    <DisplayName>单个元素匹配结果</DisplayName>
    <DataType>boolean</DataType>
  </ClaimType>
  <!-- 存储所有元素的匹配结果集合 -->
  <ClaimType Id="MatchResults">
    <DisplayName>所有匹配结果集合</DisplayName>
    <DataType>booleanCollection</DataType>
  </ClaimType>
  <!-- 最终结果:是否存在匹配元素 -->
  <ClaimType Id="HasMatchingString">
    <DisplayName>是否存在匹配元素</DisplayName>
    <DataType>boolean</DataType>
  </ClaimType>
</ClaimsSchema>

2. 编写声明转换逻辑

在<ClaimsTransformations>中定义三个转换步骤:检查单个元素、遍历集合、聚合结果:

<ClaimsTransformations>
  <!-- 检查单个字符串是否包含目标子串 -->
  <ClaimsTransformation Id="CheckSingleStringMatch" TransformationMethod="StringContains">
    <InputClaims>
      <!-- ForEach循环会自动将集合中的每个元素传入item声明 -->
      <InputClaim ClaimTypeReferenceId="item" TransformationClaimType="inputClaim" />
    </InputClaims>
    <InputParameters>
      <!-- 转义后的目标子串 -->
      <InputParameter Id="contains" DataType="string" Value="/&quot;id/&quot; /&quot;guid/&quot;" />
      <!-- 可选:是否忽略大小写,按需设置 -->
      <InputParameter Id="ignoreCase" DataType="boolean" Value="true" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="IsMatch" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>

  <!-- 遍历字符串集合,对每个元素执行单个匹配检查 -->
  <ClaimsTransformation Id="LoopThroughCollection" TransformationMethod="ForEach">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="MyStringCollection" TransformationClaimType="collection" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="ClaimsTransformationReferenceId" DataType="string" Value="CheckSingleStringMatch" />
      <InputParameter Id="LoopOutputClaimName" DataType="string" Value="IsMatch" />
      <InputParameter Id="LoopOutputClaimType" DataType="string" Value="booleanCollection" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="MatchResults" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>

  <!-- 聚合所有匹配结果:只要有一个元素匹配,最终结果为true -->
  <ClaimsTransformation Id="AggregateMatchResults" TransformationMethod="BooleanOr">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="MatchResults" TransformationClaimType="inputClaim" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="HasMatchingString" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>

3. 在技术配置文件中调用转换

创建一个技术配置文件来串联这些转换步骤,方便在用户旅程中调用:

<TechnicalProfile Id="CheckStringCollectionProfile">
  <DisplayName>检查字符串集合匹配情况</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="MyStringCollection" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="HasMatchingString" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="LoopThroughCollection" />
    <OutputClaimsTransformation ReferenceId="AggregateMatchResults" />
  </OutputClaimsTransformations>
</TechnicalProfile>

使用说明

在用户旅程的<OrchestrationStep>中引入这个技术配置文件,就能得到HasMatchingString声明(布尔值),后续可根据这个值执行分支逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:07:17