#javascript #reactjs #firebase #express #firebase-authentication
#javascript #reactjs #огневая база #выражать #firebase-аутентификация
Вопрос:
Я хочу предоставить пользователям моего приложения возможность добавлять второй фактор аутентификации, и в настоящее время я использую Firebase для регистрации и входа новых пользователей. Firebase уже позволяет вам использовать второй фактор, но ваша единственная возможность — отправить SMS на подтвержденный номер телефона. Я хочу заменить этот второй фактор на Authy OneTouch, поэтому мне было интересно, какова наилучшая практика в этом случае.
Прямо сейчас вот как я проверяю подлинность своих пользователей:
- Пользователь входит в систему, используя форму в моем клиенте. Под капотом, который я использую
signInWithEmailAndPassword
, извлекаю idToken из Firebase и устанавливаю значение persistenceNONE
. - Клиент отправляет post-запрос на мой серверный сервер, прикрепляя idToken и
singOut
сразу после этого. - Если токен действителен, сервер предоставит
HttpOnly
файл cookie сеанса, хранящий этот токен, который будет отправляться вместе с будущими запросами на мой серверный сервер для отслеживания состояния аутентификации пользователя.
Как я планирую изменить свой рабочий процесс:
- На странице профиля пользователь может выбрать или не выбрать второй фактор аутентификации.
- При выборе пользователя я отправлю запрос на свой сервер, и он вызовет
setCustomUserClaims
, чтобы прикрепить пользовательскоеmfa
утверждение и выполнить необходимые шаги для регистрации нового пользователя в Authy. - При входе в систему я получаю доступ к вызову утверждения
getIdTokenResult
и доступуtokenResult.claims.mfa
. Если он не существует, то процесс выполняется как предыдущий список. В противном случае я выхожу из системы пользователя, прошу его / ее пройти через второй фактор и регулярно опрашиваю определенный URL-адрес, который предоставляет Authy, чтобы получать обновления о статусе запроса второго фактора. - Когда я обнаруживаю, что вызов второго фактора был успешно завершен, я отправляю запрос post на свой серверный сервер, прикрепляя idToken, который я получил от Firebase, и соответствующую информацию, которую я получил из ответа Authy.
- Серверная часть проверяет, действителен ли idToken (чтобы убедиться, что запрос пароля электронной почты был выполнен ранее), затем переходит к созданию пользовательского токена с
uuid, email, password, mfa-status
использованием пользователя FirebasecreateCustomToken
, затем выполняетsignInWithCustomToken
и устанавливает файл cookie сеанса в ответе.
Верна ли моя идея в корне? В случае, если Firebase предоставляет способ настройки своего второго фактора по умолчанию, и я просто пропустил его? Спасибо.
Ответ №1:
В то время как платная платформа Google Cloud Identity Platform от Firebase Authentications предлагает 2FA с SMS, ни один из них в настоящее время не предоставляет возможности использовать / требовать пользовательский второй фактор для аутентификации пользователя.
Однако это распространенный запрос, поэтому я рекомендую подать для него запрос на функцию.
До тех пор, пока эта функция не будет добавлена в саму Firebase, единственный способ сделать что-то подобное — через пользовательского поставщика, который позволяет вам (но также требует от вас) самостоятельно управлять потоком аутентификации.
Комментарии:
1. @FrankVanBuffelen: Я вроде как подозревал это, спасибо за ваш вклад