Suas ideias em realidade digital!
JWT (JSON Web Token) é um padrão aberto para autenticação stateless, muito usado em APIs REST. Em vez de sessão no servidor, o usuário recebe um token assinado, que é enviado a cada requisição.
JWT é ideal para:
Authorization: Bearer TOKENHEADER.PAYLOAD.SIGNATURE
Para fins didáticos, vamos implementar JWT manualmente.
Em produção, use bibliotecas como firebase/php-jwt.
---
2) Gerar token JWT
'HS256', 'typ' => 'JWT'];
$payload['iat'] = time();
$payload['exp'] = time() + $expSeconds;
$base64Header = base64UrlEncode(json_encode($header));
$base64Payload = base64UrlEncode(json_encode($payload));
$signature = hash_hmac(
'sha256',
"$base64Header.$base64Payload",
$secret,
true
);
$base64Signature = base64UrlEncode($signature);
return "$base64Header.$base64Payload.$base64Signature";
}
---
3) Validar token JWT
---
Exemplo de login que gera JWT
'Credenciais inválidas']);
exit;
}
$token = generateJWT([
'id' => 1,
'email' => $data['email'],
'role' => 'admin'
], 'SEGREDO_SUPER_SECRETO');
echo json_encode(['token' => $token]);
---
Protegendo rotas com JWT
---
JWT + CORS (atenção)
Sempre libere o header Authorization:
header("Access-Control-Allow-Headers: Content-Type, Authorization");
---
Boas práticas de segurança com JWT
- Use HTTPS sempre
- Tokens curtos (1h)
- Não salve JWT em localStorage se puder evitar
- Use refresh token se necessário
- Nunca exponha o segredo
---
Erros comuns com JWT em PHP
- Usar segredo fraco
- Não validar expiração
- Não validar assinatura
- Retornar 403 em vez de 401
---