OAuth 2.0 y autorización JWT en JavaScript: guía completa para principiantes

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: por qué OAuth 2.0 y JWT son el estándar de la autorización moderna



En el desarrollo web moderno, la autenticación y autorización segura de usuarios es una de las tareas clave. Los dos protocolos y formatos más populares que resuelven esta tarea son OAuth 2.0 y JWT (JSON Web Token). Aunque a menudo se usan juntos, son cosas diferentes: OAuth 2.0 es un protocolo de delegación de acceso, mientras que JWT es un formato de token.



En este artículo, analizaremos cómo funciona OAuth 2.0, qué es JWT y cómo implementarlos en JavaScript (Node.js). El material está orientado a desarrolladores principiantes, por lo que avanzaremos desde la teoría a la práctica con ejemplos de código claros.



¿Qué es OAuth 2.0 y cómo funciona?



OAuth 2.0 (Open Authorization) es un protocolo que permite a una aplicación obtener acceso limitado a los recursos de un usuario sin transferir su nombre de usuario y contraseña. Imagine que quiere iniciar sesión en un sitio web a través de Google o GitHub; eso es OAuth 2.0.



Roles principales en OAuth 2.0

  • Resource Owner — el usuario propietario de los datos
  • Client — la aplicación que solicita acceso
  • Authorization Server — el servidor que emite tokens (por ejemplo, Google)
  • Resource Server — el servidor que almacena los datos del usuario


Flujo Authorization Code Grant (ejemplo con Node.js)

El flujo más común y seguro de OAuth 2.0 es Authorization Code Grant. Veamos su implementación usando Express.js.



// Instalación de dependencias// npm install express axios dotenv

// .envCLIENT_ID=your_client_idCLIENT_SECRET=your_client_secretREDIRECT_URI=http://localhost:3000/callback


const express = require('express');const axios = require('axios');require('dotenv').config();

const app = express();

// Paso 1: Redirigir al usuario a la página de autorizaciónapp.get('/auth', (req, res) => { const authUrl = `https://provider.com/oauth/authorize?client_id=${process.env.CLIENT_ID}&redirect_uri=${process.env.REDIRECT_URI}&response_type=code&scope=email`; res.redirect(authUrl);});

// Paso 2: Manejar el callback con el authorization codeapp.get('/callback', async (req, res) => { const { code } = req.query;

try { // Intercambiar authorization code por access token const tokenResponse = await axios.post('https://provider.com/oauth/token', { client_id: process.env.CLIENT_ID, client_secret: process.env.CLIENT_SECRET, code, redirect_uri: process.env.REDIRECT_URI, grant_type: 'authorization_code' });

const { access_token, refresh_token } = tokenResponse.data; // Guardar los tokens (en un proyecto real, en la BD) req.session.accessToken = access_token; req.session.refreshToken = refresh_token;

res.send('¡Autorización exitosa!'); } catch (error) { res.status(500).send('Error de autorización'); }});

app.listen(3000, () => console.log('Servidor iniciado en el puerto 3000'));


JWT (JSON Web Token): estructura y creación



JWT es una forma compacta y autónoma de transmitir información entre partes como un objeto JSON. El token consta de tres partes separadas por puntos:



  • Header — tipo de token y algoritmo de firma (por ejemplo, HS256)
  • Payload — datos (claims) que queremos transmitir
  • Signature — firma que garantiza la integridad de los datos


Creación de JWT en Node.js

Para trabajar con JWT usaremos la librería jsonwebtoken.



// npm install jsonwebtoken

const jwt = require('jsonwebtoken');

const secretKey = 'su_secreto

Blogs

Book Recommendations