• mfa
  • 2fa
  • totp
  • nodejs
  • security
  • authentication
  • authenticator app
  • otplib

Cómo implementar autenticación de dos factores (2FA) en Node.js con aplicaciones autenticadoras

Aprende cómo implementar autenticación de dos factores (2FA) en Node.js usando aplicaciones autenticadoras, TOTP y la biblioteca otplib. Esta guía paso a paso cubre todo, desde la generación de códigos QR hasta la verificación de códigos de autenticación.

Yijun
Yijun
Developer

¿Qué es la autentificación de dos factores (2FA)?

En aplicaciones tradicionales, normalmente utilizamos Email/Nombre de usuario/Teléfono como nuestros identificadores de identidad. Al combinar estos identificadores de identidad con contraseñas o códigos de verificación correspondientes, podemos completar el proceso de autenticación.

Sin embargo, en escenarios con mayores requisitos de seguridad, depender únicamente de los identificadores de identidad para la autenticación no es suficiente. Esto se debe a que estos identificadores de identidad y su información de verificación correspondiente pueden ser vulnerables a filtraciones.

Aquí es donde entra la autenticación de dos factores (2FA): una capa adicional de seguridad que requiere que los usuarios proporcionen dos factores de autenticación diferentes para verificar su identidad, asegurando que la persona que intenta acceder a la cuenta sea verdaderamente el usuario legítimo.

Los métodos comunes de 2FA incluyen:

  • Autenticación TOTP usando aplicaciones autenticadoras
  • Autenticación biométrica
  • Autenticación basada en dispositivos
  • Códigos de verificación por SMS

En este tutorial, nos centraremos en implementar 2FA basada en TOTP usando aplicaciones autenticadoras usando la biblioteca otplib en tu aplicación Node.js.

¿Qué es la Autenticación TOTP?

TOTP significa Contraseñas de un solo uso basadas en tiempo. Como dice Wikipedia, es un algoritmo informático que genera una contraseña de un solo uso (OTP) que utiliza el tiempo actual como una fuente de unicidad.

Con una clave secreta TOTP compartida entre el teléfono del usuario y el servidor de la aplicación, el teléfono del usuario y el servidor de la aplicación pueden generar el mismo código TOTP en el mismo momento:

Como la generación de TOTP depende del tiempo, puede calcularse sin conexión. Además, TOTP produce una cadena numérica, lo que lo hace simple y fácil de usar. Por lo tanto, verificar TOTP se utiliza comúnmente como un medio de autenticación de doble factor.

Cuando los usuarios utilizan TOTP como método de autenticación de doble factor, a menudo se encuentran con el desafío de almacenar el secreto TOTP y generar códigos TOTP. Es aquí donde las aplicaciones autenticadoras resultan útiles. Podemos utilizar aplicaciones autenticadoras para almacenar el secreto TOTP y las aplicaciones autenticadoras generarán automáticamente códigos TOTP para ti. Cuando se necesita verificación, solo tienes que abrir tu aplicación autenticadora, y obtendrás el código TOTP correspondiente al secreto TOTP. Aplicaciones autenticadoras populares incluyen Google Authenticator y Microsoft Authenticator.

El proceso de implementación de TOTP como autenticación de dos factores implica dos pasos:

  1. Asociar un secreto TOTP al usuario.
  2. Verificar el código TOTP del usuario por el secreto TOTP relacionado.

El proceso de asociar TOTP a un usuario es el siguiente:

Una vez que el usuario ha asociado TOTP, puede usarlo para la verificación. El proceso es el siguiente:

Como se ilustra en el diagrama, del lado del usuario, utilizamos aplicaciones autenticadoras para gestionar el secreto TOTP y generar códigos TOTP. Del lado del servidor, necesitamos soportar la generación de un secreto TOTP y validar el código TOTP enviado por el usuario. En este artículo, utilizaremos otpllib como ejemplo para integrar funcionalidades relacionadas con TOTP en el lado del servidor.

Implementa 2FA basada en TOTP usando otplib para tu aplicación Node.js

Asumiendo que tu aplicación está basada en Express.js, y los usuarios inician sesión a través del endpoint /sign-in, el plan para soportar TOTP en el proceso de inicio de sesión del usuario es el siguiente:

  1. Cuando el usuario no está asociado a TOTP, envía el secreto TOTP al usuario en forma de un código QR y pídeles que asocien TOTP.
  2. Cuando el usuario ya ha asociado TOTP, pídele que verifique TOTP.

Primero, instalemos las dependencias para el proyecto: otplib y qrcode:

A continuación, vamos a mejorar nuestro endpoint /sign-in.

Según nuestra implementación, cuando un usuario no está asociado a TOTP, enviaremos un código QR al frontend:

Asociar TOTP

El usuario escanea el código QR con la aplicación autenticadora, y la aplicación autenticadora generará un código TOTP y almacenará el secreto TOTP relacionado.

Google Authenticator

El usuario envía el código TOTP obtenido al servidor de la aplicación. Si el código es verificado exitosamente, podemos asociar este TOTP al usuario.

Así que, vamos a implementar una API /verify-totp para recibir el código TOTP enviado por el usuario:

De esta manera, hemos asociado exitosamente TOTP para el usuario. Posteriormente, cuando el usuario inicie sesión, solo necesitará abrir la Aplicación Autenticadora, enviar el código de verificación correspondiente al secreto TOTP previamente asociado, y el proceso de autenticación se completará.

Verificar TOTP

En la API /verify-totp, utilizamos el secreto TOTP previamente asociado al usuario para verificar el código TOTP.

Resumen

Con base en este artículo, ahora deberías poder integrar la verificación de aplicaciones autenticadoras para tus aplicaciones.

Sin embargo, este es solo un ejemplo simple. Cuando tu aplicación es grande o se espera que se vuelva compleja, integrar un nuevo método de autenticación puede incurrir en costos significativos.

La gran noticia es: Logto, como un proveedor integral de soluciones de autentificación de identidad, ofrece soporte para autenticación multifactor (MFA), incluida la verificación de aplicaciones autenticadoras. Aprovechando Logto, puedes integrar sin problemas un proceso de inicio de sesión de usuario seguro y eficiente con MFA en tu aplicación en solo unos minutos.