JWT no Delphi: o que é e como utilizar

Se você trabalha com APIs REST, especialmente em ambientes modernos com autenticação e autorização, com certeza já se deparou com o termo JWT. Mas afinal, o que é isso?

JWT – JSON Web Token

O JWT (JSON Web Token) é um padrão aberto baseado em JSON (RFC 7519) é um formato de token compacto e seguro usado para transmitir informações entre duas partes, geralmente um cliente e um servidor, de forma que essas informações possam ser verificadas e confiáveis.

Ele é muito utilizado para implementar autenticação e autorização em aplicações web e mobile. Quando um usuário faz login, por exemplo, o servidor gera um JWT e o devolve para o cliente. Esse token pode ser enviado em requisições subsequentes, normalmente via cabeçalho HTTP, permitindo que o servidor identifique o usuário sem a necessidade de manter sessões.

Estrutura de um JWT

Um JWT é composto por três partes, separadas por pontos (.), formando uma string como essa:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkNvZGU0RGVscGhpIiwiaWF0IjoxNTE2MjM5MDIyfQ. hFyIIP6gXt38XVhukyhpPRXFUUWCmL8jeyfem2Yc51I

Vamos entender cada uma delas:

1. Header (Cabeçalho)

Contém informações sobre o tipo de token e o algoritmo de assinatura usado (Essa parte é codificada em Base64URL):

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload (Corpo do token)

É onde está a carga útil, representada por um objeto JSON que contém os claims, ou seja, as informações que você deseja transmitir.

Exemplo:

{
  "sub": "1234567890",
  "iat": 1516239022, 
  "name": "Code4Delphi",  
  "meu-claim": "Usuario-Master"
}

Existem três tipos de claims: privadas, públicas e reservadas. As claims reservados não têm utilização obrigatória, mas, em algumas situações, são recomendadas. Veja a lista de claims reservadas no JWT:

ClaimTipoDescrição
issStringIssuer – Quem emitiu o token
subStringSubject – Quem é o dono do token (ex: ID do usuário)
audString ou arrayAudience – Destinatário do token (ex: nome da aplicação ou API)
expNumérico (timestamp)Expiration Time – Data/hora de expiração do token
nbfNumérico (timestamp)Not Before – O token não é válido antes deste horário
iatNumérico (timestamp)Issued At – Quando o token foi emitido
jtiStringJWT ID – Identificador único do token (pode ser usado para evitar reuso/replay attacks)

⚠️ Importante: o payload também é codificado em Base64URL porém ele não é criptografado, apenas codificado. Nunca coloque informações sensíveis aqui.

3. Signature (Assinatura)

Essa parte garante a integridade do token. É criada usando o header e o payload juntos, além de uma chave secreta. Com isso, é possível verificar se o token foi alterado.

Por exemplo, com o algoritmo HMAC SHA256:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  seu-segredo-de-256-bits
)

💡 Dica: testando e explorando JWTs no jwt.io

Se você quer entender melhor como um JWT funciona na prática, vale a pena visitar o site https://jwt.io. Ele permite analisar tokens em tempo real, mostrando a decodificação do header, payload e assinatura, além de permitir a validação com chave secreta. É uma excelente ferramenta para aprendizado, testes e depuração — principalmente quando você está começando a trabalhar com JWTs ou quer entender se o token gerado pelo seu backend está formatado corretamente.

Usando JWT com Delphi e TMS XData

Se você desenvolve APIs REST com Delphi, o TMS XData já oferece suporte integrado ao uso de JWT como mecanismo de autenticação. Isso permite que você implemente segurança nas suas APIs de forma moderna e alinhada com os padrões de mercado.

🔐 Como funciona no XData

No XData, o uso de JWT pode ser facilmente habilitado através de um middleware de autenticação. O fluxo básico é:

  1. O cliente faz login e envia usuário e senha (ou outro método de autenticação).
  2. Se as credenciais forem válidas, o servidor gera um JWT assinado e o envia de volta.
  3. Esse token é armazenado no cliente (por exemplo, em memória ou local storage).
  4. A cada requisição à API, o cliente envia o token no cabeçalho HTTP Authorization:
    Authorization: Bearer seu-token-jwt
  5. O middleware do XData valida a assinatura do token e, se tudo estiver certo, a requisição é aceita.
  6. Mais detalhes podem ser encontrados na documentação oficial neste link

▶️ Quer ver isso na prática?
Temos um vídeo no nosso canal do YouTube mostrando o passo a passo de como gerar e utilizar um JWT em Delphi, com exemplos claros e diretos ao ponto.
👉 Assista aqui: https://www.youtube.com/@code4delphi


Por hoje é só, leitores!
Não se esqueça de se cadastrar aqui no blog para receber notificações sempre que um novo conteúdo for publicado.
Nos vemos em breve no próximo post! 👋