Quando um usuário faz login, o servidor geralmente gera um id de sessão e armazena o usuário em uma tabela; cada requisição então consulta essa tabela. Isso funciona em uma única máquina, mas um conjunto de servidores de API sem estado não consegue compartilhar uma tabela em memória sem um cache ou sessões fixas (sticky sessions).

O JWT move as claims do usuário para dentro do próprio token. O token é um payload JSON compacto e seguro para URL, assinado de modo que não possa ser forjado. O servidor verifica a assinatura e lê as claims diretamente do token.

O resultado é autenticação sem estado: qualquer servidor que conheça a chave pública pode verificar qualquer usuário sem um armazenamento de sessão compartilhado. As claims e a prova viajam juntas, e é por isso que o JWT se tornou o padrão para autenticação de API e single sign-on.

Coloque as claims no token; a assinatura é a prova.

Como o token é autossuficiente, um verificador não precisa de chamada ao banco de dados, então o caminho da requisição permanece plano e rápido.

A assinatura, e não a sessão, é a âncora de confiança, então qualquer servidor sem estado com a chave pode verificar qualquer token.

Sua estrutura de três partes header.payload.signature é simples de implementar em qualquer linguagem de um ecossistema web.

Ele se compõe com OAuth e OpenID Connect, então o mesmo token funciona em muitos serviços e produtos.

Se a prova viaja com a claim, você pode verificar em qualquer lugar e escalar o verificador horizontalmente, porque a identidade se torna autossuficiente em vez de uma consulta.

O JWT foi padronizado como RFC 7519 em maio de 2015, completo com uma família JWS/JWE. Tornou-se o padrão para autenticação de aplicações de página única, gateways de API e microsserviços. Suas fraquezas conhecidas são a revogação (um token não pode ser invalidado antes do vencimento sem uma lista de negação) e bugs de confusão de algoritmo, além do custo de tamanho em relação a sessões opacas.

CONFIRA AS EVIDÊNCIAS

As fontes

  1. RFC 7519: JSON Web Token (JWT) IETF / RFC Editor · rfc-editor.org
  2. JSON Web Token Wikipedia · en.wikipedia.org