Azure B2C orchestration step前置条件如何检测claim是否为空字符串?
原有方案失效原因
ClaimsExists类型的前置条件只会校验目标声明是否存在于声明包中。你调用的RestfulProvider已经返回了phoneNumber字段,哪怕值为空字符串,readOnlyPhone声明也会被判定为存在,所以对应判断逻辑不会触发。- 直接在
<Value>标签中留空的写法会被Identity Experience Framework的XML解析器忽略,相当于没有传入第二个对比值,ClaimEquals判断永远无法成立。
可行解决方案
方案一:空字符串转null后复用原有判断逻辑
先定义一个声明转换,把readOnlyPhone的空字符串值转为null:
<ClaimsTransformation Id="EmptyReadOnlyPhoneToNull" TransformationMethod="NullEmptyStringClaim"> <InputClaims> <InputClaim ClaimTypeReferenceId="readOnlyPhone" TransformationClaimType="inputClaim" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="readOnlyPhone" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
在你调用的RestfulProvider技术概要的OutputClaimsTransformations节点中引用上述转换,之后你原来写的ClaimsExists类型的前置条件就可以正常生效。
方案二:直接对比空字符串(无需修改原声明值)
先定义声明转换判断readOnlyPhone是否等于空字符串:
<ClaimsTransformation Id="CheckReadOnlyPhoneEmpty" TransformationMethod="CompareClaimToValue"> <InputClaims> <InputClaim ClaimTypeReferenceId="readOnlyPhone" TransformationClaimType="inputClaim1" /> </InputClaims> <InputParameters> <InputParameter Id="compareTo" DataType="string" Value="" /> <InputParameter Id="operator" DataType="string" Value="equal" /> <InputParameter Id="ignoreCase" DataType="boolean" Value="false" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="isReadOnlyPhoneEmpty" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
同样在RestfulProvider技术概要的OutputClaimsTransformations节点中引用该转换,之后编排步骤的前置条件可以写为:
<Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>isReadOnlyPhoneEmpty</Value> <Value>True</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition>
内容的提问来源于stack exchange,提问作者Phaded
相关产品推荐
相关产品推荐

