O que é jwt?

JWT (JSON Web Token): Uma Visão Geral

Um JWT (JSON Web Token) é um padrão da indústria para representar declarações a serem transferidas entre duas partes de forma segura. É uma string codificada em JSON que possui três partes separadas por pontos (.):

  1. Cabeçalho (Header): Especifica o algoritmo de hashing usado (ex: HS256 - HMAC SHA256) e o tipo do token (JWT).

  2. Payload (Carga): Contém as claims (declarações) sobre a entidade (geralmente um usuário) e dados adicionais. Existem três tipos de claims:

    • Registered Claims: Predefinidas, não obrigatórias, mas recomendadas (ex: iss - emissor, sub - assunto, aud - audiência, exp - tempo de expiração, nbf - não antes de, iat - emitido em, jti - ID do token).
    • Public Claims: Definidas publicamente e registradas no IANA JSON Web Token Registry para evitar colisões.
    • Private Claims: Definidas para compartilhar informações entre partes envolvidas.
  3. Signature (Assinatura): Criada combinando o cabeçalho codificado, a carga codificada e uma chave secreta ou chave pública/privada, usando o algoritmo especificado no cabeçalho. A assinatura garante que o token não foi adulterado.

Como Funciona:

  1. O cliente (ex: navegador) faz login ou se autentica.
  2. O servidor verifica as credenciais.
  3. Se as credenciais forem válidas, o servidor gera um JWT contendo informações sobre o usuário (claims).
  4. O servidor retorna o JWT ao cliente.
  5. O cliente armazena o JWT (geralmente em localStorage ou cookies).
  6. Em requisições subsequentes, o cliente envia o JWT no cabeçalho Authorization (geralmente com o esquema Bearer).
  7. O servidor recebe o JWT, verifica a assinatura, e se a assinatura for válida e o token não tiver expirado, concede acesso aos recursos.

Vantagens do Uso de JWT:

  • Simples: Fácil de gerar e interpretar.
  • Autocontido: Contém todas as informações necessárias na própria string.
  • Escalável: Não exige que o servidor mantenha estado (stateless).
  • Seguro: Assinatura criptográfica impede a adulteração do token.
  • Portátil: Pode ser usado em diferentes domínios e linguagens de programação.

Considerações de Segurança:

  • Não armazene informações sensíveis no payload. O JWT é codificado em Base64, o que significa que pode ser facilmente decodificado (mas não adulterado sem a chave correta).
  • Use HTTPS. Para proteger o token contra interceptação durante a transmissão.
  • Implemente um tempo de expiração razoável (exp). Para limitar o tempo que um token comprometido é válido.
  • Considere o uso de Refresh Tokens: Para renovar o acesso sem exigir que o usuário faça login novamente com frequência.
  • Proteja a chave secreta/privada. Comprometer a chave secreta/privada permite a criação de tokens fraudulentos.

Conceitos Chave (Links):