JWT
Um token assinado, suas armadilhas criptográficas e seu defeito irredutível.
Autenticação com JWT
O JWT é apresentado em toda parte como a solução moderna de autenticação, e essa reputação tem uma base real: um token assinado permite que qualquer serviço verifique uma identidade sem consultar um banco de dados nem compartilhar uma sessão. Para uma arquitetura distribuída em vários serviços, é um ganho considerável.
Essa mesma propriedade é também o seu defeito central, e o ponto sobre o qual quase todos os tutoriais ficam em silêncio: um JWT não pode ser revogado. Ele é válido porque sua assinatura é válida, e essa assinatura continua válida até a expiração registrada no token. Se um token vaza, se você demite alguém, se um usuário troca de senha depois de ter sido comprometido, o token continua funcionando. Uma sessão no servidor, por sua vez, pode ser excluída.
Existem mitigações — expiração curta, refresh token, lista de bloqueio — mas cada uma reintroduz uma parte do estado que o JWT pretendia eliminar. Escolher o JWT é aceitar esse compromisso com pleno conhecimento de causa, e não evitar uma reflexão.
Esta lição cobre, portanto, o token em si: sua estrutura, sua assinatura, os dois ataques clássicos contra implementações ingênuas, sua integração ao Spring Security e o tratamento honesto das questões de armazenamento no cliente e de revogação. O código usa Spring Boot 3, Spring Security 6 e Java 17.
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão