0

基于这个问题...... REST API 端点正在验证外部 IDP 电子邮件,并且在电子邮件无效的情况下正确返回错误。

return Content(HttpStatusCode.Conflict, new CustomResponseContent
{
    Version = "1.0.0",
    Status = (int)HttpStatusCode.Conflict,
    UserMessage = message
});

现在我想检测到这个错误并在后续使用它OrchestrationStep

<OrchestrationStep Order="3" 
  Type="ClaimsExchange">
  <ClaimsExchanges>
    <ClaimsExchange Id="REST-ValidateSignInEmail" 
      TechnicalProfileReferenceId="REST-ValidateSignInEmail" />
  </ClaimsExchanges>
</OrchestrationStep>

<!-- Taken from here: https://medium.com/the-new-control-plane/creating-an-error-page-for-an-azure-ad-b2c-custom-policy-flow-fb2692a3b50f -->
<OrchestrationStep Order="4" 
  Type="ClaimsExchange">
  <Preconditions>
    <Precondition Type="ClaimEquals" 
      ExecuteActionsIf="true">
      <Value>extension_Flag</Value>
      <Value>False</Value>
      <Action>SkipThisOrchestrationStep</Action>
    </Precondition>
  </Preconditions>
  <ClaimsExchanges>
    <ClaimsExchange Id="SelfAssertedRegError" 
      TechnicalProfileReferenceId="SelfAsserted-RegError" />
  </ClaimsExchanges>
</OrchestrationStep>

如果 step3返回冲突,我想使用按此处4所述实现的自定义错误页面在 step 中显示错误消息。

我看到该步骤4基于extension_Flag.

有什么方法可以检索和存储结果REST-ValidateSignInEmail并将其用于步骤的标志中4

注意:当用户旅程完成执行时,我在 URL 中看到以下 AADB2C 错误。它来自 REST API 端点错误(409 - 冲突)...

https://mywebsite.azurewebsites.net/#error=server_error&error_description=AADB2C%3a+user%40gmail.com+is+not+valid.%0d%0aCorrelation+ID%7a+7777f77-7afd-7777-a777-7c77b7e77b7b% 0d%0a时间戳%7a+2019-11-09+14%3a40%3a57Z%0d%0a&state=7777c77a-77ad-414a-84df-3c131ed81ba7

error_description消息是我想传递给 step4的。

4

1 回答 1

2

我以不同的方式执行此操作......我没有返回 Conflict [409] 状态,而是更改了 REST 端点以返回OutputClaim如下所示:

<OutputClaims>
    <OutputClaim ClaimTypeReferenceId="extension_isEnabled" 
        PartnerClaimType="IsEnabled" DefaultValue="false"/>
    <OutputClaim ClaimTypeReferenceId="errorMessage" 
        PartnerClaimType="ErrorMessage"/>
</OutputClaims>

这样我就可以要求检查 step 4。请注意,我还errorMessage从端点返回一个。此错误消息稍后将传递给SelfAsserted-RegErrorTechnical Profile。

根据在后端完成的验证,extension_isEnabled将获得TrueFalse

在步骤4我们检查extension_isEnabled

<OrchestrationStep Order="4" 
                   Type="ClaimsExchange">
    <Preconditions>
        <Precondition Type="ClaimEquals" 
                      ExecuteActionsIf="true">
            <Value>extension_isEnabled</Value>
            <Value>True</Value>
            <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
    </Preconditions>
    <ClaimsExchanges>
         <ClaimsExchange Id="SelfAssertedRegError" 
                         TechnicalProfileReferenceId="SelfAsserted-RegError" />
    </ClaimsExchanges>
</OrchestrationStep>

Step4只会在extension_isEnabledfalse时执行。如果这是真的,我们SkipThisOrchestrationStepSelfAsserted-RegError技术配置文件根本不会被调用。UserJourney流程按预期继续。

于 2019-11-09T17:53:06.617 回答