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