O JWT (JSON Web Token) é elegante e eficiente, até que ele vaza. Quando isso acontece, o dano é total e, o pior de tudo: silencioso.
A segurança do JWT não está no fato de ele ser "secreto" (ele não é), mas na sua assinatura. Se um atacante intercepta um token de acesso, ele não precisa quebrar sua senha. Ele se torna você.
Onde mora o perigo:
-
LocalStorage é um convite: Guardar tokens onde qualquer script (XSS) pode ler é como deixar a chave do cofre colada na porta com fita crepe.
-
Logs Tagarelas: Sistemas que logam headers de requisição acabam criando um inventário de tokens válidos para qualquer um que acesse os logs do servidor.
-
Refresh Tokens Eternos: Um refresh token sem rotação permite que o acesso continue ativo para sempre, mesmo depois que você trocou a senha.
A Solução de Elite: Implemente rotação de refresh tokens e prefira HttpOnly Cookies. Se o JavaScript não consegue ler o token, o atacante também não consegue.
