Quiero brindarles a los usuarios de mi aplicación la capacidad de agregar un segundo factor de autenticación y actualmente estoy usando Firebase para iniciar sesión e iniciar la sesión de nuevos usuarios. Firebase ya te permite usar un segundo factor, pero tu única posibilidad es enviar un SMS a un número de teléfono verificado. Quiero reemplazar este segundo factor con Authy OneTouch , así que me preguntaba cuál es la mejor práctica en este caso.
En este momento , así es como autentico a mis usuarios:
signInWithEmailAndPassword , recuperando el IDToken de Firebase y configurando la persistencia en NONE .singOut inmediatamente después.HttpOnly que almacenará ese token que se enviará junto con futuras solicitudes a mi backend para realizar un seguimiento del estado de autenticación del usuario.Cómo planeo cambiar mi flujo de trabajo :
A través de la página de perfil, el usuario puede optar o no por el segundo factor de autenticación.
Cuando el usuario opte por participar, enviaré una solicitud a mi servidor y llamará a setCustomUserClaims para adjuntar un reclamo mfa personalizado y realizar los pasos necesarios para registrar un nuevo usuario en Authy.
Al iniciar sesión, accedo al reclamo llamando a getIdTokenResult y accedo a tokenResult.claims.mfa . Si no existe entonces el proceso sigue como la lista anterior. De lo contrario, cierro la sesión del usuario, le pido que revise el segundo factor y sondeo regularmente una URL específica que proporciona Authy para obtener actualizaciones sobre el estado del desafío del segundo factor.
Cuando detecto que el desafío del segundo factor se completó con éxito, envío una solicitud de publicación a mi backend adjuntando el idToken que obtuve de Firebase y la información relevante que obtuve de la respuesta de Authy.
El backend verifica si el idToken es válido (para asegurarse de que el desafío de la contraseña del correo electrónico se haya realizado previamente), luego procede a generar un token personalizado con el uuid, email, password, mfa-status mfa del usuario de Firebase usando createCustomToken , luego realiza un signInWithCustomToken y establece una cookie de sesión en la respuesta.
¿Es mi idea fundamentalmente correcta? En caso de que Firebase brinde una forma de personalizar su segundo factor predeterminado y me lo perdí. Gracias.
Si bien Google Cloud Identity Platform, el hermano pago de Firebase Authentications, ofrece 2FA con SMS , actualmente ninguno de ellos ofrece una opción para usar/requerir un segundo factor personalizado para autenticar a un usuario.
Sin embargo, es una solicitud común, por lo que recomiendo presentar una solicitud de función para ello.
Hasta que la función se agregue a Firebase, la única forma en que puede hacer algo así es a través de un proveedor personalizado , que le permite (pero también requiere que usted) tome el control del flujo de autenticación usted mismo.