1 points par imjlk 2026-03-11 | Aucun commentaire pour le moment. | Partager sur WhatsApp

En essayant d’intégrer Better Auth sur Cloudflare Pages, je tombais sans cesse sur des erreurs de limite de CPU time. Je l’ai donc conçu avec Codex.

Cloudflare permet aux Workers de communiquer directement entre eux sans URL publique, via Service Binding et le RPC WorkerEntrypoint. J’ai donc pensé qu’il serait plus naturel d’utiliser cette approche pour des fonctions d’infrastructure interne. C’est dans cette optique que j’ai imaginé un template de Worker privé de hachage de mots de passe, utilisable avec une logique d’authentification comme Better Auth.

L’architecture est simple. Le Worker appelant, chargé de l’auth, rattache le Worker hasher via un service binding privé, et le hachage ainsi que la vérification réels ne sont appelés qu’au travers de méthodes RPC comme hashPassword() / verifyPassword(). Le HTTP public est réduit au minimum, avec seulement un GET / pour les métadonnées ou le health check, et le principe de base est de ne pas exposer le hachage de mot de passe lui-même via un endpoint externe. Autrement dit, il s’agit moins de « rendre publique une API de hash » que de « séparer le password hashing comme composant Worker interne à Cloudflare ».

L’implémentation place un kernel Rust/Wasm sur une shell Worker TypeScript (le choix a été fait après un petit benchmark comparant cette approche à une implémentation full Rust), et l’algorithme de hachage retenu est Argon2id. L’intérêt de ce template n’est pas de présenter Argon2id en lui-même, mais de montrer selon quelle frontière opérationnelle isoler le password hashing dans Cloudflare Workers. Le Worker de l’application se concentre sur le flux d’authentification et la gestion de session, tandis qu’un Worker hasher distinct prend en charge le hash et la vérification.

Le flux d’utilisation avec Better Auth a également été pris en compte. Better Auth utilise scrypt par défaut, mais permet de personnaliser le hash et la vérification du mot de passe ; il est donc possible de le relier en faisant appeler le Worker hasher par le Worker appelant. Et même si des comptes existants utilisent un ancien format scrypt, le scénario prévu consiste à vérifier au moment de la connexion puis à faire une montée progressive vers un nouveau hash Argon2id via verifyAndMaybeRehash(). Autrement dit, plutôt que d’obliger tous les utilisateurs existants à changer leur mot de passe d’un coup, le template a été pensé avec un chemin de migration qui suit progressivement le trafic réel de connexion vers un preset plus robuste.

Du point de vue de l’exploitation, il a aussi été pris en compte qu’on ne peut pas évaluer Cloudflare Free et Paid selon les mêmes critères. Sur l’offre Free, la limite CPU est basse, ce qui peut rendre difficile l’utilisation de la configuration Argon2id par défaut telle quelle ; j’ai donc envisagé une configuration avec un preset comme free-tier-fallback-2026q1, en plus de standard-2026q1. Cela dit, le preset de fallback est uniquement un compromis opérationnel lié aux contraintes de la plateforme, pas une valeur présentée comme une baseline de sécurité. Même en démarrant sur Free, la documentation et les exemples incluent un flux de migration progressive permettant, une fois passé sur Paid, de ré-hacher avec un preset Argon2id plus solide.

En résumé, ce dépôt est moins une réponse à « comment calculer un hash de mot de passe dans Cloudflare Workers ? » qu’à « selon quelle frontière séparer et exploiter le password hashing dans Cloudflare Workers ? ». Il peut constituer un bon point de départ si vous faites tourner Better Auth sur Workers et souhaitez isoler la charge liée au hachage, si vous ne voulez pas ouvrir d’endpoint public de hash, ou si vous voulez migrer progressivement des comptes legacy en scrypt vers Argon2id.

repo: https://github.com/imjlk/cloudflare-auth-hasher-template
benchmark: https://github.com/imjlk/cloudflare-auth-hasher-template/tree/codex/benchmark-workspace
deploy: [Lien Deploy to Cloudflare] (Vous pouvez le déployer immédiatement après vous être connecté à votre compte Cloudflare.)

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.