Autorización y autenticación en JavaScript (Node.js): guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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 dotenv


  • express — framework web
  • bcryptjs — hash de contraseñas
  • jsonwebtoken — creación y verificación de JWT
  • dotenv — 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

Recommendations