Autenticación 2FA (TOTP) usando Node, Speakeasy y Google Authenticator

Autenticación 2FA (TOTP) usando Node, Speakeasy y Google Authenticator

En esta nueva entrada vamos a realizar un sistema de autenticación de doble factor  (2FA) usando Node.js en el Back End y Javascript en el Front End.

Bien, antes de empezar a codificar vamos a definir dos conceptos que son la base de este tutorial: 2FA y TOTP.

Las siglas 2FA provienen del ingles Two Factor Authentication (autenticación de dos factores) y TOTP de las siglas Time-based One-Time Password (Contraseña de un solo uso basada en el tiempo).

Como funciona

Cuando accedemos a nuestra cuenta de usuario lo hacemos mediante nuestro usuario y una contraseña, pero ahora vamos añadir un sistema de autenticación con el cual realizaremos una segunda validación.

Con este sistema ya tendríamos la autenticación de dos factores (2FA), pero necesitamos dotar a este sistema de mayor seguridad y por eso en los últimos años se ha añadido una nueva característica, un algoritmo conocido como contraseñas de un solo uso basadas en tiempo (TOTP).

Esta técnica nos ofrece mayor seguridad ya que nos permite validar nuestra identidad mediante un código generado en paralelo en un servidor y en una aplicación (normalmente en el teléfono), que se genera y actualiza cada 30 segundos.

Todo este conjunto nos ofrece un sistema muy seguro, ya que necesitamos conocer el usuario, la contraseña y además tener registrado en nuestro teléfono un sistema de validación que esta constantemente generando códigos de un solo uso y con un tiempo limitado para su uso.

Tecnologías y funcionamiento

La aplicación la he creado usando Javascript en el Front End, Node.js en el Back End y para el estilo visual he usado la librería de componentes Metro UI.

qr-app-2fa-totpComo podemos ver en la imagen la aplicación es extremadamente sencilla, simplemente pulsamos en el botón para generar un nuevo código QR.

Con este código registraremos el token de autorización y validación en Google Authenticator, el cual nos generará automáticamente cada 30 segundos un nuevo código de autorización.

google-authenticatorSolo queda añadir el código numérico que ha generador Google Authenticator y comprobarlo en la aplicación.

Como hemos podido ver, es un sistema muy sencillo de integrar en cualquier aplicación y nos permite asegurar el acceso a nuestras aplicaciones.

Para finalizar, desde aquí podéis acceder al repositorio para obtener el código fuente completo.