dkpage
@dkpage
Учусь

Как сделать двойную аутентификацию отправляя код на почту?

Доброго времени суток!

Вопрос в том, как сделать двойную аутентификацию отправляя 6 значный код на почту.
К примеру для аутентификации или подтверждения почты.
Api для отправки писем на почту уже есть) С ним нет проблем.
Прошу не решение, а подсказки какие варианты реализации есть или что нужно гуглить.
Есть идея сделать через JWT token, но на сколько актуально это делать я не знаю.

Буду благодарен за любые подсказки )
Заранее спасибо большое)
  • Вопрос задан
  • 159 просмотров
Пригласить эксперта
Ответы на вопрос 3
petermzg
@petermzg
Самый лучший программист
1. Пользователь ввел логин/пароль.
2. Выдайте ему JWT, только в payload пропишите состояние "No2FA"
3. Отправьте 6 цифр на почту, сохранив в базе значение.
4. Отобразите форму получения кода.
5. Пользователь вводит код, который вы отправляете на эндпоинт вместе с токеном.
6. Проверили соответствие с БД.
7. Сгенерили новый токен.

Так же можно с Cookies и сохранением состояния сессии
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
"Я еду по дороге, подскажите, куда мне поворачивать на перекрёстке? Ну или подскажите, где про это погуглить."

P.S. Или пин-код, или готовый URL с кодом. Можно заморочиться борьбой с ботами и присылать картинку, или текстовое описание последовательности "нажать Я, нажать Д, нажать У, нажать Р, нажать А, нажать К", и т.д. Хммм, чего бы ещё придумать?!
Ответ написан
Комментировать
shai_hulud
@shai_hulud
1) Сделать отдельный эндпонт для начала аутентификации типа authflow/usernamepassword
ответ:
{
    "nextStep": "email-code" | "totp-code" | "done",
    "token": "xxx" | null, // auth token, session id или что у вас используется
    "state": "xxx", // unique id для stateful приложений, либо нечто зашифрованное для распределенных stateless
}

2) Добавить эндпоинты для продолжения аутентификации типа authflow/email-code, authflow/totp-code итд
ответ тот же что и в п.1

на беке после проверки username/password проверять если ли у юзера MFA. Если есть говорить что следующий шаг это этот фактор, если нет сразу результат логина (токен).

если вход сделан через oauth2 то в конце можно вернуть authorization code и уже его обменять на токен.

для кодов использовать TOTP либо HOTP, с первым вариантом ничего в БД сохранять не надо, во втором надо.

btw. JWT тут не обязателен, можно и без него сделать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы