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,secureysameSitepara mayor protección.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias