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:
- Login do Usuário: O cliente envia as credenciais de login do usuário (geralmente via navegador) para o servidor.
- 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.
- Envio do token para o cliente: O JWT é enviado de volta para o cliente e armazenado geralmente em localStorage ou em um cookie.
-
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 esquemaBearer token
. -
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).
Top comments (0)