AAD B2C 验证技术配置文件,具有逻辑 AND 中的多个先决条件

AAD B2C Validation technical profile with multiple preconditions in logical AND

我最近开始研究 Azure Active Directory B2C 自定义策略。我试图了解如何将多个先决条件添加到验证技术配置文件中,以便在所有条件都为真(逻辑与)时跳过它。默认行为是 OR。 这是我在 DisplayControl > Actions 块中自定义策略定义的一部分。

<Action Id="VerifyCode">
    <ValidationClaimsExchange>
        <ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="VerifyOtp">
            <Preconditions>
                <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
                    <Value>email</Value>
                    <Value>automatedtest@test.com</Value>
                    <Action>SkipThisValidationTechnicalProfile</Action>
                </Precondition>
                <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
                    <Value>otp</Value>
                    <Value>7777777</Value>
                    <Action>SkipThisValidationTechnicalProfile</Action>
                </Precondition>
            </Preconditions>
        </ValidationClaimsExchangeTechnicalProfile>
    </ValidationClaimsExchange>
</Action>

如果电子邮件声明是 automatedtest@test.com 并且 otp 声明是 7777777,我想要实现的是跳过此验证技术配置文件。 我一直在研究 string claim transformations 我可以用来连接两个字符串声明以获得单个字符串,然后将其与测试值进行比较,但这听起来真的很愚蠢。

最好的方法是什么?

• Precondition 是一个 orchestrationstep 元素,必须遵循该元素才能成功进行交易。如果任何一步失败,则交易失败。此外,Azure AD B2C 按列表顺序评估先决条件。基于顺序的前提条件允许您设置应用前提条件的顺序,因为这些是用户旅程的一部分。

满足的第一个前提条件覆盖所有后续前提条件。仅当不满足所有前置条件时才执行编排步骤。

因此,先决条件元素本身的基本结构是基于“或”条件和两个声明,即电子邮件和 OTP 不能在同一先决条件元素中传递,因此您的要求无法配置逻辑上为“AND”的条件。

此外,除了“SkipThisOrchestrationStep”,不能在前置条件元素中传递任何其他操作,因此也无法通过它重定向到另一个前置条件。

• 但是您可以在下面类似地配置您的先决条件以通过这两个先决条件然后跳过编排步骤:-

           <Preconditions>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
                <Value>email</Value>
                <Value>automatedtest@test.com</Value>
                <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
                <Value>automatedtest@test.com</Value>
    <Value>true</Value>
                <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
            <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
                <Value>otp</Value>
                <Value>7777777</Value>
                <Action>SkipThisValidationTechnicalProfile</Action>
            </Precondition>
           </Preconditions>

虽然,它变得有些冗长,但满足您检查两个索赔的要求。请找到以下社区主题以了解更多详细信息:-

https://docs.microsoft.com/en-us/azure/active-directory-b2c/userjourneys#precondition

我不明白答案。查看一些有关此的文档会很有用。

无论如何,真正冗长的方法是:

拥有一个包含三个声明转换的 TP。将 TP 称为旅程中的一个步骤。

第一个对电子邮件进行 CompareClaims

第二个针对 OTP 进行 CompareClaims

第三个针对上述两个布尔值执行布尔值 AndClaims

使用输出作为前提。