AULA 40
MÓDULO 5
autenticação
⏱ 50 min
JWT — JSON Web Token
Estrutura do JWT: header, payload, signature. Claims registrados. Middleware de autenticação. Access + refresh tokens.
JWTjsonwebtokenclaimsexpBearerrefresh tokenbcrypt
JWT — JSON Web Token
JWT é um padrão aberto (RFC 7519) para tokens auto-contidos. O token carrega o payload (claims) assinado digitalmente — qualquer servidor com a chave valida sem consultar banco.
eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlciI6ImFuYSJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header
alg + type
Payload
claims: id, role, exp
Signature
HMAC(header.payload, secret)
JWT não é criptografia
JWT garante integridade (não foi alterado) mas não confidencialidade. O payload é base64 — qualquer um pode ler. Nunca coloque senha, cartão ou dados sensíveis no payload.Claims e expiração
Claims são os dados no payload. Claims registrados: iss (emissor), sub (sujeito), exp (expiração), iat (emitido em). Claims customizados: seus dados de negócio.
refresh tokens
Access token: curto (15min-1h). Refresh token: longo (7-30 dias), armazenado com segurança. Quando o access expira, usa o refresh para obter um novo sem re-login.
javascript
// JWT com jsonwebtoken const jwt = require('jsonwebtoken') const SECRET = process.env.JWT_SECRET // Gerar token no login app.post('/auth/login', async (req, res) => { const { email, password } = req.body const user = await userRepo.findByEmail(email) const valid = await bcrypt.compare(password, user.passwordHash) if (!valid) return res.status(401).json({ error: 'Credenciais inválidas' }) const token = jwt.sign( { sub: user.id, role: user.role }, SECRET, { expiresIn: '15m' } ) res.json({ token }) }) // Middleware de autenticação const authenticate = (req, res, next) => { const auth = req.headers.authorization if (!auth?.startsWith('Bearer ')) return res.status(401).json({ error: 'Token ausente' }) try { req.user = jwt.verify(auth.slice(7), SECRET) next() } catch { res.status(401).json({ error: 'Token inválido' }) } }
quiz · aula 40
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
JWT garante confidencialidade do payload?
QUESTÃO 02
Para que serve o campo 'exp' no payload JWT?
QUESTÃO 03
Por que usar tokens de curta duração (15min) para acesso?
0/3