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

B2C自定义策略中StringReplace输入转换缺失redirectUri声明错误排查

Azure AD B2C自定义策略声明转换报错原因分析

问题场景

编写的声明转换代码如下:

<ClaimsTransformation Id="FormatRedirectUri" TransformationMethod="StringReplace">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="redirectUri" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="oldValue" DataType="string" Value="/" />
    <InputParameter Id="newValue" DataType="string" Value="\" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="updatedRedirectUri" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

并将其作为输入转换应用到技术配置文件P1:

<TechnicalProfile Id="P1">
  <DisplayName>---</DisplayName>
  <Protocol
    Name="Proprietary"
    Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
  />
  <Metadata>
    <Item Key="ServiceUrl">---</Item>
    <Item Key="AuthenticationType">Bearer</Item>
    <Item Key="UseClaimAsBearerToken">bearerToken</Item>
    <Item Key="SendClaimsIn">Body</Item>
    <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item>
  </Metadata>
  <InputClaimsTransformations>
    <InputClaimsTransformation ReferenceId="FormatRedirectUri"/>
  </InputClaimsTransformations>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="redirectUri"  DefaultValue="{OIDC:RedirectUri}" AlwaysUseDefaultValue="true"/>
  </InputClaims>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

运行时收到报错:

A Claim of ClaimType with id "redirectUri" was not found, which is required by the ClaimsTransformationImpl of Type "Microsoft.Cpim.Data.Transformations.StringReplaceTransformation" for TransformationMethod "StringReplace" referenced by the ClaimsTransformation with id "FormatRedirectUri" in policy

错误原因

技术配置文件中InputClaimsTransformations的执行优先级高于InputClaims。

当执行P1技术配置文件时,系统会先触发InputClaimsTransformations里的FormatRedirectUri声明转换,但此时redirectUri声明还未生成——InputClaims中通过{OIDC:RedirectUri}解析声明的操作是在输入声明转换之后才执行的。声明转换找不到所需的redirectUri声明,因此抛出该错误。

解决方法

方案一:直接在声明转换中引用Claims Resolver

修改声明转换,通过InputParameter直接引用{OIDC:RedirectUri},无需依赖预先存在的redirectUri声明:

<ClaimsTransformation Id="FormatRedirectUri" TransformationMethod="StringReplace">
  <InputParameters>
    <InputParameter Id="inputClaim" DataType="string" Value="{OIDC:RedirectUri}" />
    <InputParameter Id="oldValue" DataType="string" Value="/" />
    <InputParameter Id="newValue" DataType="string" Value="\" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="updatedRedirectUri" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>

若后续不需要原始的redirectUri声明,可移除P1中InputClaims里的对应配置。

方案二:提前生成redirectUri声明

在用户旅程中调用P1技术配置文件之前,先执行一个专门用于解析redirectUri的技术配置文件,确保redirectUri已经存在于声明包中,再执行P1的声明转换操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:07:10