Keycloak: обход потока аутентификатора

У меня есть два UsernamePasswordForm класса как authenticators

SampleUsernamePasswordForm и SecurityUsernamePasswordForm

Если SampleUsernamePasswordForm выполнен успешно, нет необходимости переходить к SecurityUsernamePasswordForm, но если есть какая-либо ошибка учетных данных, я хочу обойти аутентификатор SampleUsernamePasswordForm и перейти к SecurityUsernamePasswordForm

Оба находятся под ALTERNATIVE прямо сейчас, что означает, что если один из них сбой, он должен перейти к следующему.

В SampleUsernamePasswordForm я пытался

if (!validateForm(context, formData)) {
        Response challengeResponse = challenge(context, getDefaultChallengeMessage(context), FIELD_PASSWORD);
        context.failureChallenge(AuthenticationFlowError.INVALID_CREDENTIALS, challengeResponse);
 }

и

if (!validateForm(context, formData)) {
        context.failure(AuthenticationFlowError.INVALID_CREDENTIALS);
 }

Я думал, что вызов context.failure вызовет SecurityUsernamePasswordForm, но он просто показывает сообщение об ошибке в той же форме входа.

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

Кроме того, по какой-то причине объект SampleUsernamePasswordForm создается 3-5 раз, прежде чем будет вызван authenticate, может ли это произойти с аутентификаторами?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если оба исполнения являются АЛЬТЕРНАТИВНЫМИ, вы бы просто назвали попытку
на SampleUsernamePasswordForm, чтобы просто перейти к следующему выполнению (SecurityUsernamePasswordForm). Но просто убедитесь, что по крайней мере один сбой или успех должен быть возвращен в конце потока.

Другие вопросы по теме