Tokens JWT en API REST: Guía Completa de Seguridad

tokens JWT en API REST

📅 Publicado el 6 de octubre, 2026 · Por Equipo RedServicio

Los tokens JWT en API REST son hoy el estándar de facto para proteger aplicaciones modernas. Si gestionas una web o un servicio que expone datos a través de una API, entiéndelos bien: de eso depende evitar accesos no autorizados, fugas de información y vulnerabilidades que, la verdad, son bastante evitables. Aquí va qué son, cómo funcionan y cómo implementarlos paso a paso en tu servidor.

¿Qué son los tokens JWT y por qué usarlos en tu API?

JWT son las siglas de JSON Web Token, un estándar abierto (RFC 7519) que permite transmitir información de forma segura entre dos partes. En la práctica es una cadena de texto con tres partes separadas por puntos:

  • Header: el algoritmo de firma utilizado, por ejemplo HS256.
  • Payload: los datos o claims, como el identificador del usuario o su rol.
  • Signature: la firma criptográfica que garantiza que el token no ha sido alterado.

¿Por qué elegir JWT frente a alternativas como las sesiones tradicionales basadas en cookies? Varias razones:

  • Sin estado (stateless): el servidor no necesita almacenar sesiones en memoria ni en base de datos, lo que facilita el escalado horizontal.
  • Ideal para APIs y móviles: funciona bien con aplicaciones SPA, apps móviles y microservicios.
  • Interoperabilidad: al ser un estándar, hay soporte en casi todos los lenguajes. PHP, Node.js, Python, Java y más.

Consejo práctico: nunca guardes información sensible (contraseñas, datos de tarjetas) en el payload de un JWT. El token está firmado, sí, pero su contenido es legible por cualquiera que lo intercepte: solo se codifica en Base64, no se cifra. No es lo mismo, y la confusión entre ambas cosas ha causado más de un disgusto.

Cómo funciona la autenticación con tokens JWT en API REST

El flujo sigue un patrón muy claro:

  1. El usuario envía sus credenciales (usuario y contraseña) a un endpoint de login, por ejemplo /api/login.
  2. El servidor valida las credenciales y, si son correctas, genera un JWT firmado con una clave secreta que solo él conoce.
  3. El cliente almacena el token, normalmente en localStorage, sessionStorage o una cookie segura.
  4. En cada petición posterior, el cliente envía el token en la cabecera Authorization: Bearer <token>.
  5. El servidor verifica la firma y los claims del token. Si todo es válido, procesa la petición; si no, responde con un error 401.

La gran ventaja de este enfoque es que el servidor no necesita consultar la base de datos en cada petición para comprobar la sesión: basta con validar la firma. Menos carga, mejor rendimiento.

Eso sí, presta atención a la caducidad del token. Es habitual darle una vida corta (15 minutos, por ejemplo) y complementarlo con un refresh token de mayor duración, para renovar el acceso sin obligar al usuario a iniciar sesión de nuevo.

Implementación paso a paso de JWT en tu servidor web (con ejemplos de código)

Veámoslo en Node.js con la librería jsonwebtoken, uno de los entornos más habituales. Primero, instala la dependencia:

npm install jsonwebtoken

1. Generar el token al iniciar sesión

En tu endpoint de login, tras validar las credenciales, firma el token así:

const jwt = require(‘jsonwebtoken’);
const token = jwt.sign({ id: usuario.id, rol: usuario.rol }, process.env.JWT_SECRET, { expiresIn: ’15m’ });
res.json({ token });

2. Proteger rutas con un middleware

Crea un middleware que verifique el token en cada petición a rutas protegidas:

function autenticar(req, res, next) {
const cabecera = req.headers[‘authorization’];
if (!cabecera) return res.status(401).json({ error: ‘Token no proporcionado’ });
try {
req.usuario = jwt.verify(cabecera.split(‘ ‘)[1], process.env.JWT_SECRET);
next();
} catch (err) {
return res.status(403).json({ error: ‘Token inválido o caducado’ });
}
}

3. Usar el middleware en tus rutas

app.get(‘/api/perfil’, autenticar, (req, res) => {
res.json({ mensaje: ‘Acceso permitido’, usuario: req.usuario });
});

Almacena la clave secreta (JWT_SECRET) en variables de entorno. Nunca en el código fuente. Y si trabajas con PHP, librerías como firebase/php-jwt te permiten replicar este mismo flujo con muy poco esfuerzo.

Para que tu API funcione de forma fiable necesitas un servidor estable y bien configurado; en RedServicio encontrarás planes de hosting con certificados SSL incluidos y soporte técnico 24/7 que te acompañarán en cada etapa de tu proyecto.

Configuración de HTTPS y cabeceras seguras para proteger tu JWT

Piénsalo un momento: el token JWT viaja en cada petición que hace tu API. Si alguien lo intercepta, accede a la cuenta del usuario. Sin más. Por eso, antes de nada, hay que forzar HTTPS en todo el dominio. Sin TLS, cualquier intermediario en la red puede leer el token en texto plano. Literalmente.

En un servidor Apache, la redirección de todo el tráfico a HTTPS se resuelve añadiendo estas líneas al archivo .htaccess:

  1. RewriteEngine On: activa el módulo de reescritura.
  2. RewriteCond %{HTTPS} off: detecta conexiones sin cifrar.
  3. RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]: redirige permanentemente a HTTPS.

Y ya que estamos, conviene reforzar las cabeceras HTTP con estas directivas. Si trabajas con Node.js y Express, el paquete helmet las aplica en una sola línea (no hay excusa):

  • Strict-Transport-Security (HSTS): obliga al navegador a usar siempre HTTPS durante el periodo definido, por ejemplo 31536000 segundos.
  • Content-Security-Policy: mitiga ataques XSS que podrían robar el token almacenado en el navegador.
  • X-Content-Type-Options: nosniff: evita la interpretación maliciosa de tipos MIME.
  • Access-Control-Allow-Origin: configura CORS de forma restrictiva, autorizando solo los orígenes legítimos que consumen tu API.

No lo olvides: valida la cabecera Authorization: Bearer en cada endpoint protegido. Rechaza las peticiones sin token o con firma inválida antes de ejecutar cualquier lógica de negocio. Y en cuanto al hosting, uno con SSL gratuito y renovación automática —como el que ofrece RedServicio— elimina cualquier excusa para posponer este paso.

Buenas prácticas: expiración, refresh tokens y almacenamiento seguro

HTTPS no lo es todo. Un token robado sigue siendo válido hasta que expire, y ahí está el problema. La gestión del ciclo de vida del JWT es, por tanto, pieza clave de tu seguridad.

Establece expiraciones cortas

¿Cuánto debe vivir un access token? Poco. Máximo 15 minutos. En el payload incluyes la claim exp y tu librería la valida automáticamente:

  • jwt.sign(payload, clave, { expiresIn: ’15m’ }) en Node.js con jsonwebtoken.
  • Rechaza siempre los tokens caducados con un código 401, para que el cliente solicite uno nuevo.

Implementa refresh tokens

El patrón habitual combina dos tokens: un access token de vida corta y un refresh token de vida larga (7 días o más) almacenado de forma segura en el servidor. El flujo es simple. Cuando el access token caduca, el cliente envía el refresh token a un endpoint como /api/refresh; el servidor comprueba que exista en base de datos y que no haya sido revocado, y emite un nuevo par de tokens. La ventaja es evidente: puedes invalidar sesiones concretas si detectas actividad sospechosa.

Almacena los tokens correctamente en el cliente

Aquí es donde más errores veo en proyectos reales. El almacenamiento del token en el navegador:

  • Evita localStorage: es accesible desde JavaScript y vulnerable a ataques XSS.
  • Usa cookies httpOnly, Secure y SameSite=Strict: el token no puede ser leído por scripts y solo viaja por HTTPS.
  • Si usas una SPA con cabecera Authorization: guarda el token en memoria (una variable de estado) y recupéralo con el refresh token al recargar la página.

Consejo práctico: rota la clave secreta de firma periódicamente y registra en logs los intentos fallidos de validación. Un patrón inusual de errores 401 puede indicar un ataque en curso.

Conclusiones: asegura tu API con RedServicio

Los tokens JWT en API REST son una solución robusta y escalable para la autenticación moderna. Pero su seguridad depende, casi por completo, de cómo los implementes: HTTPS obligatorio, cabeceras reforzadas, expiraciones cortas, refresh tokens bien gestionados y almacenamiento cuidadoso en el cliente. Ninguna de estas medidas es opcional cuando tu API maneja datos de usuarios reales.

La buena noticia es que no hace falta ser un experto en infraestructura para aplicarlas. Con un entorno de hosting sólido, certificados SSL incluidos, servidores optimizados para Node.js y PHP, y soporte técnico disponible 24/7, RedServicio te da la base para desplegar tus API con confianza. Revisa hoy mismo la configuración de tus endpoints. Tus usuarios —y sus datos— te lo agradecerán.

📝

Equipo RedServicio

Artículos escritos y revisados por nuestro equipo técnico especializado en hosting e infraestructura web en España.

¿Listo para un hosting de verdad?

Servidores en España · Soporte 24/7 en español · Migración gratuita

Ver Planes desde 3,95€/mes →

Te puede interesar:

Página Gratis — Crea tu web gratis

Clisec — Seguridad informática

Scroll al inicio