Autenticación de 2FA¶
El sistema de autenticación de dos factores (2FA) es una medida de seguridad adicional que se utiliza para proteger a los usuarios. En lugar de depender únicamente de una contraseña, el sistema 2FA requiere que el usuario proporcione una segunda prueba de identidad antes de permitir el acceso.
La autenticación de dos factores se utiliza cuando el modo offline se activa, de esta forma los usuarios pueden acceder al sistema y completar el flujo deseado sin interrumpir la experiencia del usuario.
El envío de un mensaje de texto (SMS) a un teléfono móvil es una forma común de proporcionar el segundo factor en un sistema 2FA, en nuestro caso hacemos uso de Messaging API. El proceso de autenticación para el usuario es el siguiente:
El usuario intenta acceder a su cuenta con su nombre de usuario y contraseña.
El sistema verifica la información de inicio de sesión del usuario y si es correcta envía un mensaje de texto con un código único al teléfono móvil registrado del usuario.
El usuario ingresa el código en la aplicación para completar el proceso de autenticación.
Si el código es correcto y no ha caducado, el sistema permite al usuario acceder a su cuenta en modo offline.
Durante el proceso de autenticación se está haciendo uso de dos endpoints, el primero es el que utilizamos para obtener el 2FA token. Lo haremos con la siguiente petición:
- POST /api/v1/auth/jwt/2fa/¶
Ejemplo de petición:
POST /api/v1/auth/jwt/2fa/ HTTP/1.1 Content-Type: application/json { "username": "username", "password": "password", }
El segundo endpoint que utilizaremos será el mismo que utilizamos para autenticarnos haciendo uso del protocolo JWT. En este caso, al estar el offline_mode activado, se espera el token recibido vía SMS y el username. Realizaremos la siguiente petición:
- POST /api/v1/auth/jwt/token/¶
Ejemplo de petición:
POST /api/v1/auth/jwt/token/ HTTP/1.1 Content-Type: application/json { "username": "username", "token": "123456", }
Ejemplo de respuesta:
HTTP/1.1 200 OK Content-Type: application/json { "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0c2VyX2lkIjoxLCJ1c2VybmFtZSI6InJ3aGl0ZUBob3RtYWlsLmNvbSIsImV4cCI6MTU2Njg0NjE1MiwiZW1haWwiOiJyd2hpdGVAaG90bWFpbC5jb20iLCJvcmlnX2lhdCI6MTU2Njg0MjU1Mn0.ta3rK76Y6Jtlfo7twzfwVrFDmkY_p10Id3FEReKWgnI", }