Как проверить, совпадает ли введенное значение с заданным значением?

#azure-ad-b2c

#azure-ad-b2c

Вопрос:

Я пытаюсь проверить, что код подтверждения электронной почты, введенный пользователем, совпадает с кодом, возвращенным ранее другим техническим профилем. Этот этап перехода работает должным образом, когда пользователь вводит правильный код, но зависает, когда пользователь вводит неправильный код. Что я делаю не так. Вот техническая политика, выполняемая на моем этапе путешествия:

         <TechnicalProfile Id="EnterEmailVerifyCode">
      <DisplayName>Email entry</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
        <Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item>
        <Item Key="language.button_continue">Continue</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
      </CryptographicKeys>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" />
        <InputClaim ClaimTypeReferenceId="emailVerificationCodeEntered" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="emailVerificationCodeEntered" />
      </OutputClaims>
      <OutputClaimsTransformations>
         <OutputClaimsTransformation ReferenceId="AssertEmailVerificationCodesAreEqual" />
      </OutputClaimsTransformations>
    </TechnicalProfile> 
  

Ответ №1:

Самоутверждающийся технический профиль должен вызывать преобразование утверждений в качестве технического профиля проверки.

Объявите технический профиль преобразования утверждений, который вызывает преобразование утверждений:

 <TechnicalProfile Id="ValidateEmailVerificationCodes">
  <DisplayName>Validate Email Verification Codes</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="emailVerificationCodeEntered" />
    <InputClaim ClaimTypeReferenceId="emailVerificationCodeGenerated" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="emailVerificationCodeEntered" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertEmailVerificationCodesAreEqual" />
  </OutputClaimsTransformations>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>
  

Затем вызовите этот технический профиль преобразования утверждений из самоутверждающегося технического профиля в качестве технического профиля проверки:

 <TechnicalProfile Id="EnterEmailVerifyCode">
  ...
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    ...
    <Item Key="UserMessageIfClaimsTransformationStringsAreNotEqual">The verification code is invalid</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" />
    <InputClaim ClaimTypeReferenceId="emailVerificationCodeEntered" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="emailVerificationCodeEntered" />
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="ValidateEmailVerificationCodes" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>
  

UserMessageIfClaimsTransformationStringsAreNotEqual указывает сообщение об ошибке, которое отображается, если преобразование утверждений вызывает ошибки.