Auditar una autenticación con JWT: errores comunes y código corregido
Revisa tu implementación de JWT contra los fallos habituales (algoritmos, expiración, almacenamiento, refresh tokens, revocación) y recibe hallazgos por gravedad, código corregido y tests. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 4 variables personalizables y se copia gratis en un clic.
Avanzado · Código · Pendiente de revisión editorial
Prompt
Actúa como ingeniero de seguridad de aplicaciones especializado en autenticación de APIs.
Revisa esta implementación de autenticación con JWT:
{{codigo}}
Contexto:
- Stack y librería JWT: {{stack}}
- Tipo de cliente: {{cliente}}
- Quién emite los tokens: {{emisor}}
Entregables:
1. Hallazgos con gravedad (crítica, alta, media, baja), fragmento afectado, riesgo explicado en una frase y corrección. Comprueba como mínimo:
- Verificación de firma con una lista explícita de algoritmos permitidos; rechazo de `alg: none` y de la confusión entre algoritmos simétricos y asimétricos.
- Validación de `exp`, `nbf`, `iss` y `aud`, con un margen de reloj pequeño.
- Duración del access token y uso de refresh tokens con rotación y detección de reutilización.
- Revocación y cierre de sesión: lista de bloqueo, versión de sesión o tokens de vida corta.
- Almacenamiento en el cliente: `localStorage` frente a cookie `HttpOnly`, `Secure`, `SameSite`, y la protección CSRF que exige cada opción.
- Secretos y claves: fortaleza, dónde se guardan, rotación con `kid` o JWKS.
- Datos sensibles en el payload (que solo va codificado, no cifrado) y tamaño del token.
- Manejo de errores: mensajes que no filtren información y registros sin tokens completos.
2. Código corregido para mi stack, usando una librería mantenida y sin criptografía hecha a mano.
3. Tests automatizados para cada fallo crítico o alto: token caducado, firma inválida, `alg` no permitido, audiencia incorrecta y refresh token reutilizado.
4. Prioridad de arreglos si no puedo hacerlo todo a la vez.
Restricciones:
- No afirmes que el sistema queda totalmente seguro; recomienda una revisión de seguridad o pentest antes de producción si maneja datos sensibles.
- Si falta parte del flujo (emisión, refresh o logout), pídemelo antes de dar conclusiones o márcalo como [COMPLETAR].
- Nunca incluyas en la respuesta secretos reales que aparezcan en el código: sustitúyelos por marcadores.Cómo usarlo
- Pega el código de emisión, verificación, refresh y logout, sustituyendo antes cualquier secreto real.
- Indica qué tipo de cliente consume la API y dónde guarda el token.
- Corrige primero los hallazgos críticos y añade sus tests a tu CI.
Ejemplo de uso
Stack: Node.js con Express y jsonwebtoken · Cliente: SPA en otro subdominio · Emisor: la propia API · Código: middleware de autenticación y endpoint /refresh.
Resultado de ejemplo
1. Hallazgos
| Severidad | Fragmento | Riesgo | Corrección |
|---|---|---|---|
| Alta | jwt.verify(token, secret) | Sin lista explícita de algoritmos: dependes de los valores por defecto de la librería | algorithms: ['HS256'] |
| Alta | — | No se validan iss ni aud: se acepta un token emitido para otro servicio | issuer y audience |
| Media | req.user = payload | Se confía en todo el payload | Copiar solo sub y role |
| Media | — | verify lanza excepciones sin capturar | try/catch y 401 genérico |
| [COMPLETAR] | — | No se ve la emisión, el refresh ni el logout | Necesito ese código |
2. Código corregido
const jwt = require('jsonwebtoken');
const VERIFY_OPTS = {
algorithms: ['HS256'], // nunca aceptes el alg que diga el token
issuer: 'https://api.ejemplo.es', // [COMPLETAR]
audience: 'spa-ejemplo', // [COMPLETAR]
clockTolerance: 30, // segundos de margen de reloj
};
function requireAuth(req, res, next) {
const token = req.cookies?.access_token; // cookie HttpOnly, Secure, SameSite
if (!token) return res.status(401).json({ error: 'unauthorized' });
try {
const { sub, role } = jwt.verify(token, process.env.JWT_SECRET, VERIFY_OPTS);
req.user = { id: sub, role };
return next();
} catch {
return res.status(401).json({ error: 'unauthorized' }); // sin detalles al cliente
}
}
Leer el token de una cookie requiere cookie-parser y protección CSRF en las rutas que modifican datos…
Datos clave
- Categoría
- Programación y desarrollo · APIs
- Tipo de resultado
- Código
- Nivel
- Avanzado
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Código actual, Stack y librería, Tipo de cliente y Emisor de tokens
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Es mejor guardar el JWT en localStorage o en una cookie?
localStorage queda expuesto si hay una vulnerabilidad XSS. Una cookie HttpOnly no es legible desde JavaScript, pero exige protección CSRF y SameSite bien configurado. El prompt explica qué implica cada opción para tu caso.
¿Cómo cierro sesión si los JWT no se pueden invalidar?
Con access tokens de vida corta y refresh tokens revocables en el servidor, o guardando una versión de sesión por usuario que se compruebe en cada petición. Así se puede cortar el acceso sin esperar a que caduque el token.
¿Para qué sirve este prompt?
Revisa tu implementación de JWT contra los fallos habituales (algoritmos, expiración, almacenamiento, refresh tokens, revocación) y recibe hallazgos por gravedad, código corregido y tests.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Código actual, Stack y librería, Tipo de cliente y Emisor de tokens). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel avanzado: está pensado para personas con experiencia en el tema que sepan evaluar y ajustar el resultado.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.