O que vai dentro de um token
Um JWT tem três partes separadas por pontos. As duas primeiras são JSON codificado em Base64url que qualquer um lê; a terceira é a assinatura.
- Cabeçalho — o algoritmo de assinatura (
alg) e o tipo (typ). Serviços que giram chaves também trazem umkidapontando qual foi usada. - Payload — as declarações.
subidentifica o usuário,isso emissor,audo destinatário previsto, eexp,iatenbfcarregam horários. - Assinatura — as duas primeiras partes assinadas com uma chave.
A especificação define as declarações de tempo como inteiros em segundos. Um token que colocou milissegundos ali aparece aqui milhares de anos no futuro, o que denuncia um defeito de quem o emitiu.
Decodificar não é verificar
Ler o conteúdo aqui não diz nada sobre o token ser autêntico. O payload não está trancado, qualquer um pode reescrevê-lo, e só quem tem a chave percebe que a assinatura deixou de bater.
Por isso o servidor precisa verificar a assinatura a cada requisição — e, ao fazer isso, não pode confiar no campo alg. Fixe o algoritmo esperado no servidor e recuse qualquer token que diga none ou que discorde do previsto. Implementações que seguem o cabeçalho às cegas são o caminho clássico para tokens sem assinatura passarem.
Nada de segredos no payload
Qualquer pessoa com o token, inclusive quem abrir as ferramentas do navegador, lê o payload. Se ali houver um documento de identidade, uma nota interna de administração ou dados de pagamento, considere isso publicado.
O que cabe ali é aquilo que você não se importa que o portador veja: um identificador de usuário, nomes de papel, uma expiração. O resto fica no servidor e é consultado quando preciso.
Antes de colar o token de outra pessoa
Esta ferramenta não envia o token para lugar nenhum. Ainda assim, um token dentro da validade é uma credencial: cole num chat ou num sistema de chamados e quem ler pode usar. Se um vazar, revogue aquela sessão em vez de esperar a expiração.