Auth0: Редирект из правил, как защитить состояние?

Следуя этой статье от Auth0 Перенаправить пользователей из правил, мы имеем следующий сценарий в нашем приложении. :

  • Пользователь пытается войти
  • для некоторых определенных критериев они могут быть перенаправлены на конечную точку, которая запрашивает контрольные вопросы
  • при правильном ответе механизм аутентификации возобновляет работу с использованием указанного URL-адреса:

    domain/continue?state=STATE_GENERATED
    

Мы создали образец приложения, хорошо работающего с одной проблемой. Пользователи могут видеть сгенерированное Auth0 «состояние»; будь то в перенаправлениях или на сетевых вкладках браузера.

Итак, мы попробовали следующее:

логин -> перенаправить на контрольный вопрос (состояние добавлено к URL-адресу) -> мы не продолжили, а скопировали состояние и запустили URL-адрес резюме в браузере:

https://DOMAIN.auth0.com/continue?state=THE_ORIGINAL_STATE

Из того же браузера он сделал перенаправление в наше приложение с токеном. Пользователи могут смягчить такие сложные вопросы.

Какова наилучшая практика/рекомендуемый способ защиты «состояния» в аналогичных потоках, где многофакторная проверка подлинности выполняется с использованием правил и перенаправления из правил?


person chad    schedule 06.09.2017    source источник


Ответы (1)


state используется для предотвращения CSFR при аутентификации, это не то, что вы можете использовать, чтобы гарантировать, что пользователь выполнил какое-либо действие на вашей странице «вопроса с вызовом». Вы должны просто передать состояние.

Что вам нужно сделать, так это использовать общий секрет для создания токена, который можно передать со страницы контрольного вопроса в правило для его проверки. По сути, что вы можете сделать, так это после того, как пользователь правильно ответит на вопрос, вы сгенерируете токен JWT, используя секрет, который известен как серверу страницы вызова, так и правилу. Токен JWT может быть любым, например, он может содержать что-то вроде { challenge_success: true }.

После создания токена вы перенаправляетесь обратно на:

https://DOMAIN.auth0.com/continue?state=THE_ORIGINAL_STATE&token=GENERATED_JWT

Затем в правиле вы читаете и проверяете token и проверяете, что утверждение соответствует вашим ожиданиям.

Вы можете увидеть полный пример того, как это работает здесь: https://auth0.com/docs/rules/current/redirect#how-to-securely-process-results

person Nathan Totten    schedule 07.09.2017
comment
Спасибо, Натан, да, я в конечном итоге сделал именно это. Работает нормально, спасибо! - person chad; 08.09.2017