Как я могу предоставить пользовательский второй фактор аутентификации с помощью Firebase?

#javascript #reactjs #firebase #express #firebase-authentication

#javascript #reactjs #огневая база #выражать #firebase-аутентификация

Вопрос:

Я хочу предоставить пользователям моего приложения возможность добавлять второй фактор аутентификации, и в настоящее время я использую Firebase для регистрации и входа новых пользователей. Firebase уже позволяет вам использовать второй фактор, но ваша единственная возможность — отправить SMS на подтвержденный номер телефона. Я хочу заменить этот второй фактор на Authy OneTouch, поэтому мне было интересно, какова наилучшая практика в этом случае.

Прямо сейчас вот как я проверяю подлинность своих пользователей:

  1. Пользователь входит в систему, используя форму в моем клиенте. Под капотом, который я использую signInWithEmailAndPassword , извлекаю idToken из Firebase и устанавливаю значение persistence NONE .
  2. Клиент отправляет post-запрос на мой серверный сервер, прикрепляя idToken и singOut сразу после этого.
  3. Если токен действителен, сервер предоставит HttpOnly файл cookie сеанса, хранящий этот токен, который будет отправляться вместе с будущими запросами на мой серверный сервер для отслеживания состояния аутентификации пользователя.

Как я планирую изменить свой рабочий процесс:

  1. На странице профиля пользователь может выбрать или не выбрать второй фактор аутентификации.
  2. При выборе пользователя я отправлю запрос на свой сервер, и он вызовет setCustomUserClaims , чтобы прикрепить пользовательское mfa утверждение и выполнить необходимые шаги для регистрации нового пользователя в Authy.
  3. При входе в систему я получаю доступ к вызову утверждения getIdTokenResult и доступу tokenResult.claims.mfa . Если он не существует, то процесс выполняется как предыдущий список. В противном случае я выхожу из системы пользователя, прошу его / ее пройти через второй фактор и регулярно опрашиваю определенный URL-адрес, который предоставляет Authy, чтобы получать обновления о статусе запроса второго фактора.
  4. Когда я обнаруживаю, что вызов второго фактора был успешно завершен, я отправляю запрос post на свой серверный сервер, прикрепляя idToken, который я получил от Firebase, и соответствующую информацию, которую я получил из ответа Authy.
  5. Серверная часть проверяет, действителен ли idToken (чтобы убедиться, что запрос пароля электронной почты был выполнен ранее), затем переходит к созданию пользовательского токена с uuid, email, password, mfa-status использованием пользователя Firebase createCustomToken , затем выполняет signInWithCustomToken и устанавливает файл cookie сеанса в ответе.

Верна ли моя идея в корне? В случае, если Firebase предоставляет способ настройки своего второго фактора по умолчанию, и я просто пропустил его? Спасибо.

Ответ №1:

В то время как платная платформа Google Cloud Identity Platform от Firebase Authentications предлагает 2FA с SMS, ни один из них в настоящее время не предоставляет возможности использовать / требовать пользовательский второй фактор для аутентификации пользователя.

Однако это распространенный запрос, поэтому я рекомендую подать для него запрос на функцию.

До тех пор, пока эта функция не будет добавлена в саму Firebase, единственный способ сделать что-то подобное — через пользовательского поставщика, который позволяет вам (но также требует от вас) самостоятельно управлять потоком аутентификации.

Комментарии:

1. @FrankVanBuffelen: Я вроде как подозревал это, спасибо за ваш вклад