Azure AD B2C自定义策略中直接跳转至编排步骤时会话无法保留Claim的问题咨询
各位好,我在Azure AD B2C自定义策略的使用中遇到了一个奇怪的问题,想跟大家请教下:
我们目前用自定义策略实现了一个合并登录与注册的用户旅程,登录相关的编排步骤放在旅程的前半部分,注册相关的则在后面。
为了在显示注册页面前获取一些配置信息(会存在Claim里),我们加了一个REST调用的编排步骤,并且为了确保每个会话只调用一次这个REST接口,我们给这个步骤加了ClaimsExist前置条件——只有当目标Claim不存在时才执行这个步骤,否则跳过。对应的配置代码如下:
<OrchestrationStep Order="XX" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> <Value>myConfigurationValue</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="RESTGetRegistrationConfigurationValue" TechnicalProfileReferenceId="REST-GetRegistrationConfigurationValue" /> </ClaimsExchanges> </OrchestrationStep>
补充说明下:myConfigurationValue这个Claim已经在REST-GetRegistrationConfigurationValue技术配置里设为了输出Claim,所以第一次调用这个技术配置后,这个Claim应该会被存入会话的claims bag中。
正常流程下的预期行为(已实现)
当用户从登录流程转到注册步骤时,会触发上面这个编排步骤,第一次会调用REST接口获取配置;之后如果用户刷新页面再进入这个编排步骤,因为myConfigurationValue已经在会话里了,前置条件会触发跳过,不会重复调用REST——这部分是符合预期的。
异常情况(问题所在)
但是如果用户通过查询字符串参数直接跳转到这个编排步骤(跳过了前面所有的编排步骤),就会出现每次刷新页面都会重新调用REST接口的情况,看起来myConfigurationValue这个Claim并没有被保留在会话中。
我有点困惑:明明REST技术配置已经把Claim输出到了claims bag里,为什么直接跳转的情况下,同一个会话内再次进入这个编排步骤时,Claim没有被保留,导致前置条件失效?
有没有大佬遇到过类似的问题,或者能给我一些排查的思路?非常感谢!
备注:内容来源于stack exchange,提问作者Mike Suffield

