Depois que você faz login, o servidor precisa lembrar quem você é nas próximas requisições. Uma das formas mais usadas é entregar um JWT, sigla de JSON Web Token.
As três partes do token
Um JWT é uma sequência de texto dividida em três blocos separados por ponto:
- Cabeçalho: indica o tipo do token e o algoritmo de assinatura.
- Carga (payload): traz informações como o identificador do usuário e o momento em que o token expira.
- Assinatura: calculada com uma chave secreta que só o servidor conhece.
Quando o app envia o token de volta, o servidor recalcula a assinatura. Se bater, o conteúdo é considerado íntegro. Se alguém mudar a carga, por exemplo trocando o identificador do usuário, a assinatura deixa de conferir e o token é recusado.
Como é o fluxo
- O usuário envia e-mail e senha.
- O servidor confere os dados e gera o JWT, com prazo de validade.
- O app guarda o token e o envia em cada chamada, normalmente no cabeçalho de autorização.
- O servidor valida a assinatura e o prazo e responde.
A vantagem é que o servidor não precisa consultar um registro de sessão a cada chamada, o que ajuda quando há várias APIs.
Cuidados importantes
O conteúdo do JWT pode ser lido por qualquer um que tenha o token, então ele não é lugar para dados sensíveis. Outros pontos:
- Use prazos curtos de validade. Um token roubado vale até expirar.
- Use sempre HTTPS, para o token não trafegar exposto. Veja o que é certificado SSL e HTTPS.
- Guarde a chave de assinatura fora do código, em variável de ambiente.
- Valide o algoritmo esperado no servidor, sem aceitar o que o cabeçalho do token disser.
- Pense em como revogar: como o token vale até expirar, é comum combinar um token de acesso curto com um token de renovação.
Quando usar
JWT faz sentido em APIs usadas por apps móveis, aplicações com várias partes e integração entre serviços. Para um site simples com um servidor só, sessão tradicional costuma ser mais fácil de manter e de invalidar. Antes de implementar do zero, considere uma biblioteca ou serviço de autenticação consolidado, porque erros de detalhe em segurança são comuns.