Implemente un sistema de autenticación multifactor en aplicaciones Node.js con Twilio
La seguridad es una de las principales preocupaciones en el desarrollo de aplicaciones web modernas. La autenticación multifactor (MFA) se ha convertido en un estándar de seguridad que ayuda a proteger las cuentas de usuario mediante un segundo nivel de verificación. En este artículo, aprenderemos a implementar un sistema de MFA en una aplicación Node.js utilizando la API de Twilio para el envío de mensajes SMS.
¿Qué es la autenticación multifactor?
La autenticación multifactor es un método de seguridad que requiere que los usuarios proporcionen dos o más factores de verificación para acceder a una cuenta. Esto puede incluir algo que el usuario sabe (una contraseña), algo que el usuario tiene (un token de hardware o un teléfono) o algo que el usuario es (huellas dactilares o reconocimiento facial).
Por qué usar SMS para MFA
- Accesibilidad: La mayoría de las personas tienen acceso a un teléfono móvil.
- Simplicidad: Los mensajes SMS son fáciles de entender y manejar.
- Seguridad: Aunque no es infalible, es un paso adicional en la cadena de seguridad.
Configuración del proyecto
Para comenzar, asegúrate de tener Node.js instalado en tu máquina. Luego, crearemos un nuevo proyecto y añadimos las dependencias necesarias.
mkdir mfa-example
cd mfa-example
npm init -y
npm install express body-parser twilio dotenv
Configurar Twilio
- Dirígete a Twilio y crea una cuenta.
- Compra un número de teléfono desde el panel de control de Twilio.
- Obtén tus credenciales de Twilio:
Account SIDyAuth Token.
Implementación del código
A continuación, implementaremos el servidor Express y la lógica para enviar el código de verificación.
const express = require('express');
const bodyParser = require('body-parser');
const twilio = require('twilio');
require('dotenv').config();
const app = express();
app.use(bodyParser.json());
const twilioClient = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
let verificationCode;
app.post('/send-code', (req, res) => {
const { phoneNumber } = req.body;
verificationCode = Math.floor(100000 + Math.random() * 900000); // Genera un código de 6 dígitos
twilioClient.messages
.create({
body: `Su código de verificación es: ${verificationCode}`,
from: process.env.TWILIO_PHONE_NUMBER,
to: phoneNumber
})
.then(message => res.json({ success: true, messageId: message.sid }))
.catch(err => res.status(400).json({ success: false, error: err }));
});
app.post('/verify-code', (req, res) => {
const { code } = req.body;
if (parseInt(code) === verificationCode) {
return res.json({ success: true });
} else {
return res.status(400).json({ success: false, error: 'Código incorrecto' });
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Servidor corriendo en el puerto ${PORT}`);
});
Pruebas del sistema
Para probar tu sistema de autenticación multifactor, simplemente hace una solicitud POST a /send-code con el número de teléfono y luego intenta verificar el código generado.
Ejemplo de llamada a la API
Usando Postman o cURL, consume tus endpoints:
curl -X POST http://localhost:3000/send-code -H 'Content-Type: application/json' -d '{"phoneNumber": "+1234567890"}'
curl -X POST http://localhost:3000/verify-code -H 'Content-Type: application/json' -d '{"code": "123456"}'
Conclusión
Implementar un sistema de autenticación multifactor utilizando Twilio puede significativamente mejorar la seguridad de tus aplicaciones. Aunque SMS no es el método más seguro, es un paso importante hacia la efectiva protección de los datos de usuario. ¡Prueba el código y hazlo parte de tu flujo de trabajo de desarrollo!