Ao tentar integrar o Better Auth no Cloudflare Pages, continuei encontrando erros de CPU time limit. Então acabei montando isso junto com o Codex.
A Cloudflare permite que Workers se comuniquem diretamente entre si sem URL pública, usando Service Binding e RPC com WorkerEntrypoint, então me pareceu mais natural usar esse caminho para funções com cara de infraestrutura interna. Por isso, imaginei um template de Worker privado para password hasher que possa ser usado em lógicas de autenticação como as do Better Auth.
A estrutura é simples. O Worker chamador, responsável pelo auth, conecta o Worker hasher por meio de private service binding, e o hash e a verificação reais são chamados apenas por métodos RPC como hashPassword() / verifyPassword(). O HTTP público fica reduzido ao mínimo, como GET / para metadata/health, e a premissa padrão é não expor o hash de senha em si como endpoint externo. Ou seja, em vez de “publicar uma hash API”, a ideia está mais próxima de “separar o password hashing como um componente interno de Worker dentro da Cloudflare”.
A implementação usa um shell de Worker em TypeScript com um kernel em Rust/Wasm (decidido após um benchmark simples para comparar com uma implementação totalmente em Rust), e o algoritmo de hash adotado foi o Argon2id. O foco deste template não é apresentar o Argon2id em si, mas sim em que fronteira operacional separar o password hashing dentro do Cloudflare Workers. O Worker da aplicação foca no fluxo de autenticação e no gerenciamento de sessão, enquanto o hash/verificação fica a cargo de um Worker hasher separado.
Também considerei o fluxo de uso junto com o Better Auth. O Better Auth usa scrypt por padrão, mas como permite customizar password hash/verify, dá para conectá-lo chamando o Worker hasher a partir do Worker chamador. E, mesmo que as contas existentes ainda usem o formato legado em scrypt, a ideia é validar no momento do login e então fazer a migração gradual para um novo hash em Argon2id com verifyAndMaybeRehash(). Em outras palavras, em vez de forçar todos os usuários existentes a trocar a senha de uma vez, o template foi pensado com uma rota de migração que acompanha o tráfego real de login e move tudo aos poucos para um preset mais forte.
Do ponto de vista operacional, também levei em conta que não dá para avaliar Cloudflare Free e Paid com o mesmo critério. No plano Free, o limite de CPU é pequeno, então pode ser difícil usar a configuração padrão do Argon2id como está; por isso pensei em uma composição com um preset como free-tier-fallback-2026q1, separado do standard-2026q1. Ainda assim, esse preset de fallback é apenas um compromisso operacional diante das limitações da plataforma, não um valor que eu queira apresentar como linha de base de segurança. Mesmo começando no Free, a documentação e os exemplos já incluem um fluxo de migração gradual para permitir rehash com um preset Argon2id mais forte quando depois houver upgrade para o plano Paid.
Resumindo, este repositório está menos para “como calcular hash de senha no Cloudflare Workers” e mais para “em que fronteira separar e operar o password hashing no Cloudflare Workers”. Pode ser um bom ponto de partida se você estiver rodando Better Auth em Workers e quiser separar a carga do trecho de hashing, se não quiser abrir um endpoint público de hash, ou se quiser migrar aos poucos contas legadas em scrypt para Argon2id.
repo: https://github.com/imjlk/cloudflare-auth-hasher-template
benchmark: https://github.com/imjlk/cloudflare-auth-hasher-template/tree/codex/benchmark-workspace
deploy: [Link para Deploy no Cloudflare] (Você pode fazer o deploy imediatamente depois de entrar na sua conta Cloudflare.)
Ainda não há comentários.