Отображение сообщения об ошибке с пользовательской политикой Azure AD B2C для сброса пароля - PullRequest
0 голосов
/ 06 марта 2019

Я выполнил шаги в этом SO вопросе , а также в документации AssertBooleanClaimIsEqualToValue .

Однако я не могу отобразить сообщение об ошибке.

У меня есть ссылка на электронную почту для пользовательского процесса сброса пароля.Ссылка проверяет пользователя, поэтому мне не нужно, чтобы пользователь проверял адрес электронной почты в соответствии с обычным потоком сброса пароля.

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

<UserJourney Id="PasswordReset-Custom">
      <OrchestrationSteps>

        <OrchestrationStep Order="1" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="PasswordResetUsingEmailAddress" TechnicalProfileReferenceId="AAD-UserReadUsingEmailAddress" />
          </ClaimsExchanges>
        </OrchestrationStep>    

        <OrchestrationStep Order="2" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
          </ClaimsExchanges>
        </OrchestrationStep>

        <OrchestrationStep Order="3" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="UpdateFlag" TechnicalProfileReferenceId="AAD-UserWriteProfileUsingObjectId" />
          </ClaimsExchanges>
        </OrchestrationStep>

        <OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
      </OrchestrationSteps>
      <ClientDefinition ReferenceId="DefaultWeb" />
    </UserJourney>

AAD-UserWriteProfileUsingObjectId записывает флаг, указывающий, что путешествие выполнено.

<TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
                    <DisplayName>Change password (username)</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
                    <Metadata>
                        <Item Key="ContentDefinitionReferenceId">api.localaccountpasswordreset</Item>
            <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">Process complete blah.</Item>
                    </Metadata>
                    <CryptographicKeys>
                        <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
                    </CryptographicKeys>
                    <InputClaims>
                        <InputClaim ClaimTypeReferenceId="objectId" />
                    </InputClaims>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
                        <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
                    </OutputClaims>
                    <ValidationTechnicalProfiles>
                        <ValidationTechnicalProfile ReferenceId="AAD-UserWritePasswordUsingObjectId" />
                    </ValidationTechnicalProfiles>
                </TechnicalProfile>

Имеется проверка TP AAD-UserWritePasswordUsingObjectId.

<TechnicalProfile Id="AAD-UserWritePasswordUsingObjectId">
                    <Metadata>
                        <Item Key="Operation">Write</Item>
                        <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>            
                    </Metadata>
                    <IncludeInSso>false</IncludeInSso>
                    <InputClaims>
                        <InputClaim ClaimTypeReferenceId="objectId" Required="true" />
                    </InputClaims>          
                    <PersistedClaims>
                        <PersistedClaim ClaimTypeReferenceId="objectId" />
                        <PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password"/>
                    </PersistedClaims>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="dummyObjectId" />
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="EnsureCompletedIsTrue" />
          </OutputClaimsTransformations>
                    <IncludeTechnicalProfile ReferenceId="AAD-Common" />
                </TechnicalProfile>

Имеет OutputClaimsTransformation EnsureCompletedIsTrue.

<ClaimsTransformation Id="EnsureCompletedIsTrue" TransformationMethod="AssertBooleanClaimIsEqualToValue">
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="extension_Completed" TransformationClaimType="inputClaim" />
        </InputClaims>
        <InputParameters>
          <InputParameter Id="valueToCompareTo" DataType="boolean" Value="true" />
        </InputParameters>
      </ClaimsTransformation>

Так что если extension_Completed равно True, должно выдаваться сообщение об ошибке «Процесс завершен».

Iпроверили, что флаг установлен, но я не вижу сообщения об ошибке?

1 Ответ

1 голос
/ 07 марта 2019

Согласно doc он утверждает, что значение претензий соответствует ожидаемому, в противном случае выдается ошибка. Вы утверждаете это против «истинного», но не должно ли оно быть против «ложного»?

Если ссылка никогда не использовалась, значение претензии равно false. Проверка выполняется, чтобы утверждать, что это ложно. Как только он используется, значение претензии должно быть истинным (я думаю, вы бы где-нибудь с этим справились). И если пользователь снова использует ссылку, значение утверждения теперь равно true, и утверждение будет выдано, поскольку оно ожидает ложное значение.

<ClaimsTransformation Id="EnsureCompletedIsTrue" TransformationMethod="AssertBooleanClaimIsEqualToValue">
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="extension_Completed" TransformationClaimType="inputClaim" />
    </InputClaims>
    <InputParameters>
        <InputParameter Id="valueToCompareTo" DataType="boolean" Value="false" />
    </InputParameters>
</ClaimsTransformation>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...