Programação

O Guia Completo de Autenticacao em Aplicacoes Web Modernas

Vinicius Farias13 min de leitura214 visualizações
#Autenticacao#Seguranca#JWT#OAuth

Autenticacao e Complexa Por Um Bom Motivo


Autenticacao mal feita e a vulnerabilidade numero 1 em aplicacoes web. Vamos entender cada abordagem e quando usar.

Session-Based (Classica)


O servidor cria uma sessao e guarda no banco/Redis. O cliente recebe um cookie com o session ID.



  • Pros: simples, facil de invalidar, seguro

  • Contras: nao escala horizontalmente sem Redis, problemas com mobile

  • Quando usar: aplicacoes web tradicionais, admin panels

JWT (JSON Web Token)


Token auto-contido que carrega as informacoes do usuario. O servidor nao precisa guardar estado.



  • Pros: stateless, escala facil, funciona com mobile e SPAs

  • Contras: nao da para invalidar individualmente, token pode ser grande

  • Quando usar: APIs, microservicos, apps mobile

Implementacao Segura de JWT


import { SignJWT, jwtVerify } from 'jose';

const SECRET = new TextEncoder().encode(process.env.JWT_SECRET);

// Criar token
const token = await new SignJWT({ userId: user.id })
.setProtectedHeader({ alg: 'HS256' })
.setExpirationTime('7d')
.setIssuedAt()
.sign(SECRET);

// Verificar token
const { payload } = await jwtVerify(token, SECRET);

OAuth 2.0 / Social Login


Delega autenticacao para terceiros (Google, GitHub, etc).



  • Pros: sem gerenciar senhas, confiavel, UX simples

  • Contras: dependencia de terceiro, configuracao inicial complexa

  • Quando usar: apps B2C, quando nao quer gerenciar senhas

Onde Guardar Tokens







MetodoSegurancaAcesso JS
Cookie httpOnlyAltaNao (bom)
localStorageBaixa (XSS)Sim
sessionStorageMediaSim

Recomendacao: sempre use cookies httpOnly com flags Secure e SameSite.

NextAuth.js


Para projetos Next.js, o NextAuth simplifica tudo:


// Suporta Google, GitHub, Email, Credentials...
import NextAuth from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';

export default NextAuth({
providers: [
GoogleProvider({
clientId: process.env.GOOGLE_ID,
clientSecret: process.env.GOOGLE_SECRET,
})
]
});

Dicas de Seguranca



  • Nunca armazene senhas em texto puro — use bcrypt com salt

  • Rate limit em login (maximo 5 tentativas por minuto)

  • Tokens de curta duracao + refresh tokens

  • HTTPS obrigatorio

  • Protecao contra CSRF em formularios

Compartilhar este artigo: