Профили проверки все еще выполняются, если предыдущие профили выдавали ошибку - PullRequest
0 голосов
/ 03 марта 2020

У меня есть пользовательская политика регистрации, в которой есть 3 профиля проверки.

<ValidationTechnicalProfile ReferenceId="UsernameCheck" ContinueOnError = "false"/>
<ValidationTechnicalProfile ReferenceId="API-VerifyStep1"  ContinueOnError = "false"/>
<ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonName" ContinueOnError="false" />

<TechnicalProfile Id="UsernameCheck">
  <Metadata>
    <Item Key="Operation">Read</Item>
    <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">false</Item>
  </Metadata>
  <IncludeInSso>false</IncludeInSso>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="signInNames.emailAddress" Required="true" />
  </InputClaims>
  <OutputClaims>
    <!-- Required claims -->
    <OutputClaim ClaimTypeReferenceId="objectId" DefaultValue="NOTFOUND" />
    <OutputClaim ClaimTypeReferenceId="objectIdNotFound" DefaultValue="NOTFOUND" AlwaysUseDefaultValue="true" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertObjectIdObjectIdNotFoundAreEqual" />
  </OutputClaimsTransformations>
  <IncludeTechnicalProfile ReferenceId="AAD-Common" />
</TechnicalProfile>


<TechnicalProfile Id="API-VerifyStep1">
<DisplayName>Validate user's input data and return if valid to sign-up</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <Metadata>
        <Item Key="ServiceUrl">https://...</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <!-- Set AuthenticationType to Basic or ClientCertificate in production environments -->
        <Item Key="AuthenticationType">None</Item>
        <!-- REMOVE the following line in production environments -->
        <Item Key="AllowInsecureAuthInProduction">true</Item>
      </Metadata>
<InputClaims>
    <InputClaim ClaimTypeReferenceId="extension_accessNumber"  />
    <InputClaim ClaimTypeReferenceId="email" />
    <InputClaim ClaimTypeReferenceId="signInName" />

</InputClaims>

<OutputClaims>
    <OutputClaim ClaimTypeReferenceId="extension_error" PartnerClaimType="extension_error" DefaultValue="true" />
    <OutputClaim ClaimTypeReferenceId="extension_message"  PartnerClaimType="extension_message" DefaultValue="Error"/>
    <OutputClaim ClaimTypeReferenceId="objectId" />
    <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
    <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" /> 

</OutputClaims>
<OutputClaimsTransformations>
   <OutputClaimsTransformation ReferenceId="AssertErrorMessageFalseStep1" />
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />

Проблема заключается в том, что все профили проверки выполняются из-за ошибки. Если один из первых двух выдает ошибку, я получаю сообщение на странице регистрации. Тем не менее, пользователь все еще добавляется в Azure AD. Почему он это делает? В чем смысл ContinueOnError? Как сделать так, чтобы запись происходила только после того, как другие два закончили проверку?

Заранее спасибо

1 Ответ

0 голосов
/ 04 марта 2020

ContinueOnError по умолчанию имеет значение false, поэтому вам не нужно указывать его, если вы хотите поведение по умолчанию.

Поскольку вы используете провайдер restful, я подозреваю, что вы столкнулись с проблемой, упомянутой в следующем потоке - Пользовательская политика REST API ValidationTechnicalProfile ContinueOnError не работает для HTTP-кодов, таких как 404 NotFound и 401 неавторизованных

По существу, технический профиль проверки должен возвращать 409. https://docs.microsoft.com/en-us/azure/active-directory-b2c/validation-technical-profile

Вы также можете использовать Предварительные условия, как указано на приведенной выше странице, чтобы избежать выполнения технического профиля.

...