1. O Que E JWT
JWT (JSON Web Token) e um padrao aberto (RFC 7519) para transmitir informacoes de forma compacta e autocontida entre partes como um objeto JSON assinado digitalmente. E amplamente usado para autenticacao e autorizacao em APIs modernas.
Ao fazer login, o servidor gera um JWT e o retorna ao cliente. O cliente armazena o token e o envia em requisicoes subsequentes (geralmente no header Authorization: Bearer token). O servidor verifica a assinatura do token para validar a identidade sem precisar consultar um banco de dados.
2. Estrutura do Token
Um JWT e composto por tres partes separadas por pontos: header.payload.signature. Cada parte e codificada em Base64URL.
- Header: metadados sobre o token, incluindo o tipo (JWT) e o algoritmo de assinatura (ex: HS256).
- Payload: os claims (afirmacoes) sobre o usuario e metadados adicionais. Pode incluir dados como user_id, roles e expiracao.
- Signature: resultado de assinar header + payload com a chave secreta usando o algoritmo especificado.
3. Algoritmos de Assinatura
Os algoritmos mais comuns para assinar JWTs sao:
- HS256 (HMAC SHA-256): usa uma chave simetrica compartilhada entre emissor e verificador. Simples e eficiente, mas requer que ambos os lados conheam o secret.
- RS256 (RSA SHA-256): usa par de chaves assimetrico. A chave privada assina, a publica verifica. Ideal para cenarios com multiplos verificadores.
- ES256 (ECDSA SHA-256): similar ao RS256 mas usando criptografia de curvas elipticas, com chaves menores e melhor performance.
"Esta ferramenta usa HS256 via Web Crypto API nativa do navegador — nenhuma biblioteca de terceiros e carregada para operacoes criptograficas."
4. Claims Padroes
O JWT define um conjunto de claims padrao (registered claims) recomendados:
- iss (issuer): emissor do token.
- sub (subject): identificador do sujeito (geralmente o user_id).
- aud (audience): destinatario(s) do token.
- exp (expiration time): timestamp Unix de expiracao. Tokens expirados devem ser rejeitados.
- iat (issued at): timestamp de emissao do token.
- jti (JWT ID): identificador unico do token, util para prevenir reuso.
5. Boas Praticas de Seguranca
Ao usar JWTs em producao, siga estas recomendacoes:
- Sempre defina o campo exp com um tempo de vida curto (15 minutos a algumas horas).
- Use HTTPS para transmitir tokens — Base64URL nao e criptografia.
- Prefira armazenar tokens em httpOnly cookies em vez de localStorage para mitigar XSS.
- Use chaves secretas longas e aleatorias para HS256 (minimo 256 bits).
- Valide o algoritmo no header do token — nunca confie cegamente nele.
6. Perguntas Frequentes
O payload do JWT e criptografado?
Nao. O payload e apenas codificado em Base64URL, o que e facilmente decodificavel por qualquer pessoa. Nunca inclua dados sensiveis (senhas, numeros de cartao, etc.) no payload de um JWT.
Como invalidar um JWT antes de expirar?
JWTs sao stateless por natureza — uma vez emitidos, sao validos ate expirar. Para invalidacao antecipada (ex: logout), e necessario manter uma blocklist de JTIs no servidor ou usar tokens com tempo de vida muito curto combinados com refresh tokens.
O que e a diferenca entre autenticacao e autorizacao com JWT?
Autenticacao verifica quem voce e (o token prova sua identidade). Autorizacao define o que voce pode fazer (os claims no payload, como roles, definem suas permissoes). JWTs podem carregar ambos os tipos de informacao simultaneamente.
Esta ferramenta suporta RS256 ou ES256?
Atualmente a ferramenta suporta apenas HS256. Suporte a algoritmos assimetricos (RS256, ES256) esta planejado para versoes futuras.