如何在B2C自定义策略中移除字符串中的短横线(-)?
在Azure AD B2C自定义策略中移除ClientID的短横线
你可以通过自定义策略的**声明转换(Claims Transformation)**实现需求,核心是用ReplaceAll方法替换所有短横线。具体步骤如下:
1. 声明目标ClaimType
在策略的<BuildingBlocks> -> <ClaimsSchema>中添加用于存储无短横线ClientID的声明类型:
<ClaimType Id="clientIdWithoutDashes"> <DisplayName>无短横线的Client ID</DisplayName> <DataType>string</DataType> </ClaimType>
2. 创建移除短横线的声明转换
在<BuildingBlocks> -> <ClaimsTransformations>中添加转换规则,将原始带短横线的ClientID(假设声明ID为clientId)中的-替换为空字符串:
<ClaimsTransformation Id="RemoveDashesFromClientId" TransformationMethod="ReplaceAll"> <InputClaims> <InputClaim ClaimTypeReferenceId="clientId" TransformationClaimType="inputClaim" /> </InputClaims> <InputParameters> <InputParameter Id="oldValue" DataType="string" Value="-" /> <InputParameter Id="newValue" DataType="string" Value="" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="clientIdWithoutDashes" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
3. 配置调用转换的技术配置文件
在<ClaimsProviders>中添加技术配置文件,触发上述声明转换:
<ClaimsProvider> <DisplayName>Client ID转换</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="RemoveDashesFromClientIdProfile"> <DisplayName>移除ClientID中的短横线</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="clientIdWithoutDashes" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="RemoveDashesFromClientId" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
4. 在用户旅程中调用该转换
在用户旅程(<UserJourneys>)的合适编排步骤中添加调用逻辑:
<OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="TransformClientId" TechnicalProfileReferenceId="RemoveDashesFromClientIdProfile" /> </ClaimsExchanges> </OrchestrationStep>
补充:获取当前ClientID(如果需要)
如果策略中未获取原始ClientID,可添加GetClientId声明转换来获取:
<ClaimsTransformation Id="GetClientId" TransformationMethod="GetClientId"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="clientId" TransformationClaimType="clientId" /> </OutputClaims> </ClaimsTransformation>
将此转换添加到上述技术配置文件的<OutputClaimsTransformations>中,确保先获取原始clientId再执行替换。
完成配置后,clientIdWithoutDashes声明将存储无短横线的ClientID值,可直接用于后续步骤(如API调用参数、用户属性存储等)。
内容的提问来源于stack exchange,提问作者Cristiano
相关产品推荐
相关产品推荐

