Orchestration Step预条件为OR逻辑,如何调整实现kmsiValue为False时强制执行
实现方案
要满足「只要记住我复选框未勾选(kmsiValue为False)就必须执行MFA步骤,kmsiValue为True时仅符合MFA跳过条件才跳过」的需求,可通过拆分编排步骤为两个环节实现:第一步计算是否符合跳过MFA的全部条件,第二步根据计算结果判断是否执行MFA。
1. 新增临时声明
在你的策略声明架构中新增两个布尔类型临时声明:
<ClaimType Id="isEligibleForMFASkip"> <DisplayName>是否符合MFA跳过的业务条件</DisplayName> <DataType>boolean</DataType> </ClaimType> <ClaimType Id="shouldSkipMFA"> <DisplayName>是否跳过当前MFA步骤</DisplayName> <DataType>boolean</DataType> </ClaimType>
2. 新增跳过标识计算逻辑
新增声明转换和对应的技术配置文件,用于生成最终跳过标识:
<ClaimsTransformation Id="CalculateShouldSkipMFA" TransformationMethod="BooleanAnd"> <InputClaims> <InputClaim ClaimTypeReferenceId="kmsiValue" TransformationClaimType="inputClaim1" /> <InputClaim ClaimTypeReferenceId="isEligibleForMFASkip" TransformationClaimType="inputClaim2" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="shouldSkipMFA" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation> <TechnicalProfile Id="CalculateMFASkipFlag"> <DisplayName>计算MFA步骤跳过标识</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="isEligibleForMFASkip" DefaultValue="false" /> <!-- 存在活跃MFA会话或上次MFA时间在窗口内,则标记为符合跳过条件 --> <OutputClaim ClaimTypeReferenceId="isEligibleForMFASkip" DefaultValue="true"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> <Value>isActiveMFASession</Value> <Action>SkipThisClaim</Action> </Precondition> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>isLastMFATimeGreaterThanWindow</Value> <Value>False</Value> <Action>SkipThisClaim</Action> </Precondition> </Preconditions> </OutputClaim> <OutputClaim ClaimTypeReferenceId="shouldSkipMFA" DefaultValue="false" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CalculateShouldSkipMFA" /> </OutputClaimsTransformations> </TechnicalProfile>
3. 拆分原有编排步骤
把原来的MFA编排步骤拆分为「标识计算」和「MFA执行」两个步骤:
<!-- 新增步骤7:计算MFA跳过标识 --> <OrchestrationStep Order="7" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="CalculateMFASkip" TechnicalProfileReferenceId="CalculateMFASkipFlag" /> </ClaimsExchanges> </OrchestrationStep> <!-- 原MFA步骤调整为步骤8,仅根据最终标识判断是否跳过 --> <OrchestrationStep Order="8" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>shouldSkipMFA</Value> <Value>True</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="PhoneFactor-Verify-MFATimeWindow" TechnicalProfileReferenceId="PhoneFactor-InputOrVerify" /> </ClaimsExchanges> </OrchestrationStep>
逻辑验证
- 记住我未勾选时,kmsiValue为False,
shouldSkipMFA通过布尔与计算后永远为False,MFA步骤必然执行 - 记住我已勾选时,仅当同时满足「存在活跃MFA会话」或「上次MFA时间在有效窗口内」,才会跳过MFA步骤,否则仍需执行
内容的提问来源于stack exchange,提问作者Ankush Daga
相关产品推荐
相关产品推荐

