Autorización y autenticación en JavaScript (Node.js)
En el desarrollo web moderno, la seguridad de los datos del usuario es una prioridad. En esta guía, analizaremos los conceptos clave de autenticación (verificación de identidad) y autorización (control de acceso) en el entorno Node.js. Aprenderá cómo implementar registro, inicio de sesión con contraseña, uso de tokens JWT y protección de rutas.
1. Conceptos básicos
- Autenticación — proceso de confirmar la identidad (por ejemplo, mediante correo electrónico y contraseña).
- Autorización — verificar si el usuario tiene permiso para realizar una acción (rol admin/user).
- JWT (JSON Web Token) — forma compacta de transmitir datos como token, a menudo utilizado para sesiones.
- Hash de contraseñas — requisito de seguridad obligatorio (bcrypt, argon2).
2. Instalación de dependencias
Para trabajar necesitaremos los siguientes paquetes npm:
npm install express bcryptjs jsonwebtoken dotenvexpress— framework webbcryptjs— hash de contraseñasjsonwebtoken— creación y verificación de JWTdotenv— gestión de claves secretas
3. Registro simple y hash de contraseña
Creemos un modelo básico de usuario (para el ejemplo usaremos un array en memoria; en un proyecto real, reemplácelo por una base de datos):
const bcrypt = require('bcryptjs');const users = []; // simulación de BD
async function registerUser(email, password) { const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(password, salt); users.push({ email, password: hashedPassword }); console.log('Usuario registrado:', email);}
// Ejemplo de llamada:registerUser('user@example.com', 'myPassword123');4. Autenticación con JWT
Después de un inicio de sesión exitoso, emitimos al cliente un token JWT. El token contiene el ID del usuario y la fecha de expiración.
const jwt = require('jsonwebtoken');require('dotenv').config();
const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';
function loginUser(email, password) { const user = users.find(u => u.email === email); if (!user) return null;
const isValid = bcrypt.compareSync(password, user.password); if (!isValid) return null;
// Creamos el token const token = jwt.sign( { userId: user.email, role: 'user' }, JWT_SECRET, { expiresIn: '1h' } ); return token;}5. Middleware para proteger rutas
Creemos un middleware que verifique el JWT en el encabezado Authorization:
function authMiddleware(req, res, next) { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
if (!token) { return res.status(401).json({ message: 'Token no proporcionado' }); }
try { const decoded = jwt.verify(token, JWT_SECRET); req.user = decoded; // pasamos los datos del usuario a la solicitud next(); } catch (err) { return res.status(403).json({ message: 'Token inválido' }); }}6. Ejemplo de uso en Express
Unamos todo — creemos rutas para inicio de sesión y perfil protegido:
const express = require('express');const app = express();app.use(express.json());
// Ruta de inicio de sesiónapp.post('/api/login', (req, res) => { const { email, password } = req.body; const token = loginUser(email, password); if (!token) { return res.status(401).json({ message: 'Credenciales incorrectas' }); } res.json({ token });});
// Ruta protegidaapp.get('/api/profile', authMiddleware, (req, res) => { res.json({ message: 'Acce También en la biblioteca
Planificador de tareas en Node.js (node-cron, node-schedule, Bull)
sqlc para Go: guía completa con ejemplos prácticos
Autorización y autenticación en JavaScript (Node.js): guía completa
Geolocalización y mapas en Kotlin: bibliotecas, herramientas y ejemplos
Trabajo con Excel en C# (.NET): bibliotecas EPPlus, ClosedXML y NPOI