OAuth 2.0 y autorización JWT en JavaScript: 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

Introducción a OAuth 2.0 y autorización JWT en JavaScript

Las aplicaciones web modernas requieren un sistema robusto de autenticación y autorización. Los dos estándares más populares — OAuth 2.0 (protocolo de delegación de acceso) y JWT (JSON Web Tokens) — se usan a menudo juntos para crear APIs seguras. En este artículo, analizaremos cómo implementar OAuth 2.0 y autorización JWT en JavaScript (Node.js) desde cero.

Aprenderás:

  • Qué es OAuth 2.0 y para qué sirve
  • Cómo funcionan los tokens JWT
  • Cómo configurar un servidor de autorización en Express
  • Cómo proteger rutas con middleware


Fundamentos de OAuth 2.0: flujos y roles

OAuth 2.0 define cuatro roles: Resource Owner (usuario), Client (aplicación), Authorization Server (servidor que emite tokens) y Resource Server (servidor que proporciona datos). El flujo más común es Authorization Code Grant, que se utiliza en aplicaciones web.

En este artículo, nos centraremos en la implementación de un Resource Server y un Authorization Server usando JWT, en lugar de proveedores externos (Google, GitHub). Esto te dará control total sobre el proceso.



Instalación de dependencias

Para empezar, crea un nuevo proyecto Node.js e instala los paquetes necesarios:

npm init -ynpm install express jsonwebtoken bcrypt dotenv cors

Descripción de los paquetes:

  • express — framework para crear el servidor
  • jsonwebtoken — creación y verificación de JWT
  • bcrypt — hashing de contraseñas
  • dotenv — manejo de variables de entorno
  • cors — configuración de CORS para la API


Implementación de autorización JWT en Node.js

JWT es un token compacto que consta de tres partes: encabezado, payload (carga útil) y firma. Lo usaremos para autenticar usuarios después de un inicio de sesión exitoso.



Configuración del servidor y modelo de usuario

Crea un archivo server.js y define la estructura básica:

require('dotenv').config();const express = require('express');const jwt = require('jsonwebtoken');const bcrypt = require('bcrypt');const cors = require('cors');

const app = express();app.use(express.json());app.use(cors());

const PORT = process.env.PORT || 3000;const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';

// Almacenamiento temporal de usuarios (en producción usa una BD)const users = [];


Registro y hashing de contraseñas

Al registrarse, la contraseña debe ser hasheada con bcrypt:

app.post('/api/register', async (req, res) => {    try {        const { email, password } = req.body;                // Verificar si el usuario ya existe        const existingUser = users.find(u => u.email === email);        if (existingUser) {            return res.status(400).json({ message: 'El usuario ya existe' });        }

// Hashing de la contraseña const hashedPassword = await bcrypt.hash(password, 10); const newUser = { id: users.length + 1, email, password: hashedPassword }; users.push(newUser);

res.status(201).json({ message: 'Usuario creado' }); } catch (error) { res.status(500).json({ message: 'Error del servidor' }); }});


Inicio de sesión y generación del token JWT

Después de verificar las credenciales, generamos el token con jsonwebtoken:

app.post('/api/login', async (req, res) => {    try {        const { email, password } = req.body;                // Buscar usuario        const user = users.find(u => u.email === email);        if (!user) {                

Blogs

Book Recommendations