
🔐 Aprende autenticación construyéndola correctamente. Una implementación de referencia extensible y compatible con estándares para Cloudflare Workers con Hono, Turso, PBKDF2 y sesiones de doble token JWT.
Aprende autenticación construyéndola correctamente.
Demo en vivo · Modelo de amenazas · Flujos de autenticación · ADRs
Nota de la demo: El endpoint de inicio de sesión está protegido por desafíos PoW adaptativos — los fallos repetidos devuelven una dificultad de prueba de trabajo creciente. La limitación de velocidad con respaldo de caché está implementada y probada, pero actualmente no está habilitada en la demo en vivo; cambia
createCacheClientenapp.tspara activarla.
Una implementación de referencia de autenticación desde cero para Cloudflare Workers — hashing de contraseñas PBKDF2, sesiones de tokens duales JWT, comparación en tiempo constante, expiración deslizante y un plugin de observabilidad removible — todo conectado con Hono, Turso (con almacenamiento en caché opcional Valkey/Redis) y TypeScript estricto.
Cada decisión de diseño se remonta a un estándar: NIST SP 800-63B para credenciales, NIST SP 800-132 para derivación de claves, OWASP ASVS para verificación y RFC 8725 para mejores prácticas de JWT.
¿Lanzando un producto? Usa Better Auth en su lugar — cubre OAuth, passkeys, MFA, limitación de velocidad y más de fábrica con un ecosistema de plugins activo. Este repositorio existe para enseñarte cómo funciona la autenticación, no para reemplazar una librería de producción.
| Capa | Qué hace |
|---|---|
| Almacenamiento de contraseñas | PBKDF2-SHA384 con sales de 128 bits, resumen de integridad, seguimiento de versión (password-service.ts) |
| Gestión de sesiones | Sesiones del lado del servidor con seguimiento de dispositivo, expiración deslizante, límite máximo de 3 por usuario; sesiones opcionales con respaldo de caché a través de Valkey/Redis (session-service.ts, cached-session-service.ts) |
| Cambio de contraseña | Re-verificación de contraseña actual, nuevo hash PBKDF2 completo, revocación atómica de todas las sesiones (account-service.ts, ADR-004) |
| Patrón de tokens duales JWT | Token de acceso de 15 min + token de actualización de 7 días, vinculado a la sesión para revocación (token-service.ts) |
| Middleware de autenticación | Flujo de actualización automática, fijación explícita de HS256, validación de la reclamación typ (require-auth.ts) |
| Cookies seguras | HttpOnly, Secure, SameSite=Strict, Path=/ (cookie.ts) |
| Cabeceras de seguridad | HSTS, CSP, CORP/COEP/COOP, Permissions-Policy, eliminación de huellas digitales (security.ts) |
| Validación de entrada | Esquemas Zod con política de contraseñas conforme a NIST (solo longitud, sin reglas de complejidad) |
| Limitación de velocidad | Aceleración de ventana fija contra ataques de fuerza bruta y relleno de credenciales: por IP en rutas de autenticación públicas (ej. inicio de sesión), por usuario en acciones protegidas; sin bloqueos duros (alineado con NIST) (ADR-006) |
| Plugin de observabilidad | Eventos de seguridad estructurados, desafíos PoW adaptativos, API /ops autenticada por agente — se conecta mediante middleware, removible eliminando un paquete (ADR-008) |
| Herramientas CLI | TUI en Go (plctl) para consultar eventos, gestionar sesiones y aprovisionar credenciales de agente a través de la superficie /ops (tools/cli/) |
| Pruebas de vectores de ataque | Manipulación de JWT, confusión de algoritmos, confusión de tipos, casos límite de Unicode, comprobaciones de divulgación de información |
Este proyecto omite intencionalmente características que están fuera de su alcance educativo. Si estás extendiendo este código hacia producción (o evaluando lo que requiere un sistema de autenticación de producción), las tablas a continuación organizan las brechas por nivel de prioridad.
Para la mayoría de proyectos reales, usa Better Auth en lugar de construir esto tú mismo.
| Característica | Por qué es importante | Estándar / Referencia |
|---|---|---|
| Verificación de contraseñas filtradas | Previene el uso de contraseñas que se sabe están en filtraciones públicas | NIST SP 800-63B §5.1.1.2, API de HIBP |