Voltar para artigos
Arquitetura
10 min
19 de dezembro de 2025

Auth/SSO: o que dá errado e como evitar

Os erros mais comuns em implementações de autenticação e como construir auth seguro de verdade.

Autenticação é, sem dúvida, a parte mais crítica de qualquer aplicação web. Um erro aqui não causa apenas um bug visual, causa vazamento de dados, roubo de contas e destruição de reputação. No entanto, continuamos cometendo os mesmos erros básicos.

Erro #1: Armazenar tokens no LocalStorage

Este é o erro mais comum em tutoriais de React. "Receba o JWT e salve no localStorage.setItem('token', ...)".

O problema: Qualquer script JavaScript rodando na sua página tem acesso ao LocalStorage. Se você tiver uma vulnerabilidade XSS (Cross-Site Scripting) - por exemplo, via uma dependência npm comprometida ou um input mal sanitizado - o atacante pode ler seu token e roubar a sessão do usuário.

A solução: Cookies HttpOnly. Esses cookies são enviados automaticamente pelo navegador em requisições para o seu domínio, mas não são acessíveis via JavaScript. Mesmo que um atacante consiga rodar script na sua página, ele não consegue ler o cookie.

Erro #2: Ignorar CSRF

Ao usar cookies, você se protege de XSS (roubo de token), mas se expõe a CSRF (Cross-Site Request Forgery). Um site malicioso pode fazer uma requisição para sua API e o navegador enviará o cookie automaticamente.

A solução:

  • Frameworks modernos como Next.js/Auth.js lidam com isso verificando cabeçalhos de origem.
  • SameSite cookies (SameSite=Lax ou Strict) ajudam muito a mitigar isso nativamente no navegador.

Erro #3: Implementar criptografia de senha por conta própria

Nunca, jamais, implemente seu próprio hash de senha. Não use MD5. Não use SHA-1. Não use SHA-256 simples.

A solução: Use algoritmos desenhados para senhas, como Argon2, Bcrypt ou Scrypt. Eles são lentos de propósito para dificultar ataques de força bruta. No Node.js, bibliotecas como argon2 ou o próprio bcrypt são o padrão.

SSO (Single Sign-On) e o problema do "Link Mágico"

SSO (entrar com Google/GitHub) é ótimo para UX. Mas a implementação manual de OAuth 2.0 é cheia de armadilhas. Um erro comum é não validar o parametro state para prevenir ataques de replay ou não verificar assinatura de tokens ID (OIDC).

Sempre use bibliotecas de alto nível (como NextAuth/Auth.js ou Lucia) que abstraem o handshake do OAuth. Se fizer na mão, você vai errar.

Conclusão

Segurança não é sobre ser "impenetrável", é sobre elevar a barra de dificuldade para o atacante.

  1. Tokens em Cookies HttpOnly e Secure.
  2. Use bibliotecas de auth maduras, não faça do zero.
  3. Mantenha suas dependências atualizadas.