DEV Community

Alex Reis
Alex Reis

Posted on

O que é JWT?

JWT

JSON Web Token (JWT) é um padrão (RFC 7519) para transmitir informações de forma segura entre partes como um objeto JSON. Ele é compacto e autoassinado. As informações contidas nele são assinadas digitalmente, garantindo que os dados não sejam alterados durante a transmissão. A estrutura de um JSON Web Token normalmente é Header.Payload.Signature.

1. Header (Cabeçalho)

  • Contém os metadados do token.
  • Tipicamente, consiste em duas partes: o tipo do token, que é sempre "JWT", e o algoritmo de assinatura que está sendo usado (HS256, RS256 ou ECDSA).
  • É codificado em Base64Url.

2. Payload (Carga)

  • Contém as claims, que são declarações sobre a entidade (geralmente o usuário) e dados adicionais.
  • As informações no payload, embora protegidas contra adulteração, são legíveis por qualquer pessoa que possua o token decodificado.
  • O payload é codificado em Base64Url.

3. Signature (Assinatura)

  • Garante integridade e autenticidade do token.
  • É gerada utilizando o cabeçalho (já codificado), o payload codificado, uma chave secreta (para algoritmos simétricos como HMAC) ou um par de chaves pública/privada (para algoritmos assimétricos como RSA ou ECDSA) e o algoritmo especificado no cabeçalho.
  • O processo envolve aplicar o algoritmo escolhido à concatenação de cabeçalho e payload codificados, usando a chave.
  • Também é codificada em Base64Url.

A concatenação dessas três partes codificadas em Base64Url, separadas por pontos, forma o JSON Web Token.

Fluxo de funcionamento do JWT

O fluxo de funcionamento do JWT geralmente ocorre da seguinte forma:

  1. Login do Usuário: O cliente envia as credenciais de login do usuário (geralmente via navegador) para o servidor.
  2. Geração do JWT pelo servidor: Se as credenciais são válidas, o servidor faz a verificação das credenciais. Então, o servidor cria um JWT contendo dados sobre o usuário (conhecidos como "claims" no payload) e assina usando uma chave secreta.
  3. Envio do token para o cliente: O JWT é enviado de volta para o cliente e armazenado geralmente em localStorage ou em um cookie.
  4. Cliente inclui o token em requisições subsequentes: Sempre que o cliente deseja acessar rotas protegidas ou recursos restritos, ele inclui o JWT no cabeçalho HTTP da requisição, mais comumente no cabeçalho Authorization usando o esquema Bearer token.
  5. Verificação do Token pelo Servidor: Ao receber uma requisição com um JWT no cabeçalho Authorization, o servidor (ou as rotas protegidas) verifica a validade do token JWT. A verificação inclui validar a estrutura,o formato, e conteúdo do token (validação) e confirma a autenticidade e integridade do token através da verificação da assinatura (verificação).

Boas práticas com JWT

  • Use HTTPS: Transmita JWTs apenas por conexões seguras para prevenir ataques man-in-the-middle.
  • Defina tempo de expiração: Evite tokens de longa duração que possam ser explorados.
  • Use armazenamento seguro: Armazene JWTs de forma segura (por exemplo, cookies HttpOnly em vez de localStorage).

Referências

Top comments (0)