馃摫 JWT y cookies seguras

Next.js JWT y Cookies

21 - 馃摫 JWT y cookies seguras

Aprende a gestionar la autenticaci贸n segura en Next.js usando JSON Web Tokens (JWT) y cookies protegidas.


馃攽 ¿Qu茅 es JWT?

Un JSON Web Token (JWT) es un token compacto y seguro que se usa para transmitir informaci贸n entre el servidor y el cliente. Contiene datos del usuario (payload) y se firma con una clave secreta para garantizar que no sea alterado.

Un JWT t铆pico tiene tres partes: Header, Payload y Signature:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.  // Header
eyJ1c2VySWQiOiIxMjM0IiwibmFtZSI6IkpvbiJ9.  // Payload
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c  // Signature
      

馃崻 Guardando JWT en cookies seguras

Para mayor seguridad, podemos almacenar el JWT en cookies HTTP-only, evitando que scripts del navegador accedan al token.

import { serialize } from "cookie";

// Crear cookie segura con JWT
export function setTokenCookie(res, token) {
  const cookie = serialize("authToken", token, {
    httpOnly: true,
    secure: process.env.NODE_ENV === "production",
    sameSite: "strict",
    maxAge: 60 * 60 * 24, // 1 d铆a
    path: "/",
  });
  res.setHeader("Set-Cookie", cookie);
}
      

馃挕 Explicaci贸n:

  • httpOnly: true — bloquea acceso desde JavaScript del cliente.
  • secure: true — solo env铆a la cookie sobre HTTPS.
  • sameSite: strict — previene ataques CSRF.
  • maxAge — tiempo de vida de la cookie en segundos.

馃攼 Validaci贸n del token en el servidor

En Next.js podemos validar la cookie en cada request para proteger rutas privadas:

import jwt from "jsonwebtoken";
import { parse } from "cookie";

export function authenticate(req) {
  const cookies = parse(req.headers.cookie || "");
  const token = cookies.authToken;
  if (!token) return null;

  try {
    const user = jwt.verify(token, process.env.JWT_SECRET);
    return user;
  } catch (error) {
    return null;
  }
}
      

Con esto, podemos proteger rutas en API Routes o middleware verificando que authenticate(req) devuelva un usuario v谩lido.


✅ Resumen

  • 馃搫 JWT contiene la informaci贸n del usuario firmada con una clave secreta.
  • 馃崻 Guardar el token en cookies HTTP-only aumenta la seguridad.
  • 馃洝️ Validar el JWT en el servidor protege rutas privadas y evita accesos no autorizados.
  • ⚡ Configura httpOnly, secure y sameSite para mayor protecci贸n.

Publicar un comentario

0 Comentarios