【问题标题】:Orchestration Steps Precondition works on OR logic not on AND编排步骤前提条件适用于 OR 逻辑而不适用于 AND
【发布时间】:2021-10-14 07:18:32
【问题描述】:

我有一个在某些先决条件下工作的编排步骤,即使满足其中一个先决条件,编排步骤也会被跳过,但我希望它以另一种方式工作。

如果不满足任何前提条件,我希望执行该编排步骤。

以下是我的编排步骤,如果未选中记住我复选框 (kmsiValue),那么我想运行编排步骤,而不管其他先决条件,但我无法实现。

 <OrchestrationStep Order="7" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
              <Value>isActiveMFASession</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
             <Value>kmsiValue</Value>
             <Value>True</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
              <Value>isLastMFATimeGreaterThanWindow</Value>
              <Value>False</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <ClaimsExchanges>
            <ClaimsExchange Id="PhoneFactor-Verify-MFATimeWindow" TechnicalProfileReferenceId="PhoneFactor-InputOrVerify" />
          </ClaimsExchanges>
        </OrchestrationStep>

更新:

对不起,我现在有点困惑,我已经有一个记住我的 TP,复选框选择时值会相应变化

<ClaimsProvider>
  <DisplayName>Local Account</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
      <Metadata>
        <Item Key="setting.enableRememberMe">True</Item>
      </Metadata>
       <InputClaims>
      <InputClaim ClaimTypeReferenceId="kmsiValue" DefaultValue="{Context:KMSI}" AlwaysUseDefaultValue="true"/>
</InputClaims>
          <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="kmsiValue" DefaultValue="{Context:KMSI}" AlwaysUseDefaultValue="true" />
           </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

我的问题是我现在如何拆分编排步骤以使其正常工作?

【问题讨论】:

    标签: azure-ad-b2c azure-ad-b2c-custom-policy


    【解决方案1】:

    我会把它分成两个子旅程。 KMSI=True 的一个子旅程,KMSI=False 的另一个子旅程。然后在这个 subjourney 中设计编排步骤。如果 KMSI=true,编排步骤包含您的其他先决条件。如果 KMSI=false,您的编排步骤不包含任何先决条件。

    【讨论】:

      【解决方案2】:

      一种方法是将所有逻辑放入 REST API 并根据您是否希望跳过该步骤返回 T 或 F。

      另一种方法是有一个仅检查 KMSI 的步骤。如果这导致 TP 正在运行,请设置一个标志。

      在下一步中,检查标志,如果 TP 已运行则跳过。否则,运行其他步骤。

      更新

      @Jas 是个好主意,但在第一步中设置一个标志,例如

      <OutputClaim ClaimTypeReferenceId="kmsi" DefaultValue="true" AlwaysUseDefaultValue="true"/>
      

      并在第二步中使用前置条件“claimsequal”。

      “kmsi”应该是布尔值。

      【讨论】:

      • 如果我尝试使用您建议的其他方式 - 我如何检测上一个编排步骤是否已执行并限制下一个编排步骤?
      • 更新了问题,还是有点糊涂
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      相关资源
      最近更新 更多