
🔐 Apprenez l'authentification en la construisant correctement. Une implémentation de référence extensible et conforme aux normes pour Cloudflare Workers avec Hono, Turso, PBKDF2 et sessions à double jeton JWT.
Apprenez l'authentification en la construisant correctement.
Démo en direct · Modèle de menace · Flux d’authentification · ADR
Note de démo : L’endpoint de connexion est protégé par des défis PoW adaptatifs — les échecs répétés augmentent la difficulté de la preuve de travail. Un limiteur de débit basé sur le cache est implémenté et testé mais n’est pas activé sur la démo en direct ; activez
createCacheClientdansapp.tspour l’activer.
Une implémentation de référence d’authentification construite de zéro pour Cloudflare Workers — hachage de mot de passe PBKDF2, sessions à double jeton JWT, comparaison en temps constant, expiration glissante et un plugin d’observabilité amovible — le tout assemblé avec Hono, Turso (avec mise en cache optionnelle Valkey/Redis) et TypeScript strict.
Chaque choix de conception remonte à une norme : NIST SP 800-63B pour les identifiants, NIST SP 800-132 pour la dérivation de clés, OWASP ASVS pour la vérification, et RFC 8725 pour les bonnes pratiques JWT.
Vous livrez un produit ? Utilisez Better Auth à la place — il couvre OAuth, les clés d’accès, l’authentification multifacteur, la limitation de débit et bien plus encore prêts à l’emploi avec un écosystème de plugins actif. Ce dépôt existe pour vous apprendre comment fonctionne l’authentification, pas pour remplacer une bibliothèque de production.
| Couche | Ce qu’elle fait |
|---|---|
| Stockage des mots de passe | PBKDF2-SHA384 avec sels de 128 bits, condensé d’intégrité, suivi de version (password-service.ts) |
| Gestion des sessions | Sessions côté serveur avec suivi d’appareil, expiration glissante, limite de 3 par utilisateur ; sessions optionnelles avec cache via Valkey/Redis (session-service.ts, cached-session-service.ts) |
| Changement de mot de passe | Re-vérification du mot de passe actuel, re-hachage PBKDF2 complet, révocation atomique de toutes les sessions (account-service.ts, ADR-004) |
| Schéma à double jeton JWT | Jeton d’accès de 15 min + jeton de rafraîchissement de 7 jours, liés à la session pour la révocation (token-service.ts) |
| Middleware d’authentification | Flux de rafraîchissement automatique, épinglage explicite HS256, validation de la revendication typ (require-auth.ts) |
| Cookies sécurisés | HttpOnly, Secure, SameSite=Strict, Path=/ (cookie.ts) |
| En-têtes de sécurité | HSTS, CSP, CORP/COEP/COOP, Permissions-Policy, suppression des empreintes (security.ts) |
| Validation des entrées | Schémas Zod avec politique de mot de passe conforme NIST (longueur uniquement, pas de règles de complexité) |
| Limitation de débit | Limitation à fenêtre fixe contre les attaques par force brute et par bourrage d’identifiants : IP sur les routes d’authentification publiques (ex. connexion), utilisateur sur les actions protégées ; pas de verrouillage définitif (conforme NIST) (ADR-006) |
| Plugin d’observabilité | Événements de sécurité structurés, défis PoW adaptatifs, API /ops authentifiée par agent — se branche via middleware, amovible en supprimant un paquet (ADR-008) |
| Outillage CLI | TUI Go (plctl) pour interroger les événements, gérer les sessions et provisionner les identifiants d’agent via l’interface /ops (tools/cli/) |
| Tests de vecteurs d’attaque | Altération JWT, confusion d’algorithme, confusion de type, cas limites Unicode, vérifications de divulgation d’informations |
Ce projet omet intentionnellement des fonctionnalités qui sortent de son cadre pédagogique. Si vous étendez ce code vers la production (ou évaluez ce qu’un système d’authentification de production nécessite), les tableaux ci-dessous organisent les lacunes par niveau de priorité.
Pour la plupart des projets réels, utilisez Better Auth plutôt que de construire vous-même ces fonctionnalités.
| Fonctionnalité | Pourquoi c’est important | Norme / Référence |
|---|---|---|
| Vérification des mots de passe compromis | Empêche l’utilisation de mots de passe connus dans les fuites publiques | NIST SP 800-63B §5.1.1.2, API HIBP |