Autenticação com JWT em APIs usando Delphi Horse

Autenticação com JWT em APIs usando Delphi Horse post thumbnail image

No mundo das APIs modernas, a segurança é um dos aspectos mais críticos. Garantir que somente usuários autorizados possam acessar recursos protegidos é essencial. E é aqui que o JWT (JSON Web Token) entra em cena. Este método de autenticação é amplamente utilizado devido à sua eficiência, flexibilidade e compatibilidade com diversas linguagens de programação.

Se você já desenvolve APIs em Delphi Horse, sabe o quanto esse framework é ágil e poderoso para criar aplicações web e RESTful. Mas integrar um mecanismo de autenticação robusto como o JWT pode parecer um desafio para quem está começando.

Neste artigo, vamos descomplicar o uso do JWT com o Delphi Horse. Você aprenderá como proteger suas rotas de API, validar tokens e até mesmo adicionar informações personalizadas para enriquecer sua autenticação. Tudo isso de forma prática, com exemplos de código e explicações claras.

Preparado? Vamos direto ao que interessa: segurança simplificada com Delphi Horse e JWT!

O que é JWT e como funciona?

O JWT (JSON Web Token) é uma solução amplamente utilizada para autenticação e troca de informações seguras entre sistemas. Ele é baseado em um padrão aberto (RFC 7519) e utiliza um formato compacto e autocontido para transmitir dados entre partes.

Componentes do JWT

O token JWT é composto por três partes separadas por pontos (.), formando uma string no seguinte formato:

Cada parte desempenha um papel específico:

1. Header
O cabeçalho contém metadados sobre o token, incluindo:

  • Algoritmo de assinatura usado para proteger o token, como HMAC SHA256 ou RSA.
  • Tipo de token, geralmente definido como JWT.
Exemplo de um header em JSON:

    2. Payload
    O payload armazena as informações que queremos transmitir. Ele contém “claims”, que são declarações como:

    • Claims registrados: Padrões definidos na especificação, como sub (identificação do usuário), exp (data de expiração), e iat (data de emissão).
    • Claims personalizados: Dados adicionais específicos da sua aplicação, como permissões, papéis, etc.

    Exemplo de um payload típico:

    3. Signature
    A assinatura é a garantia de que o token não foi alterado. Ela é gerada combinando o header e o payload com uma chave secreta e o algoritmo especificado.

    A fórmula para criar a assinatura é:

    A assinatura resultante é anexada ao token e é validada pelo servidor para confirmar sua autenticidade.

    Por que usar JWT?

    O JWT possui vantagens significativas, especialmente em arquiteturas RESTful:

    1. Autossuficiência
      Como o token contém todas as informações necessárias para autenticação, não é necessário consultar o banco de dados a cada requisição, reduzindo a carga no servidor.
    2. Formato Compacto
      O JWT utiliza codificação Base64URL, tornando-o eficiente para transmissão em cabeçalhos HTTP ou URLs.
    3. Flexibilidade
      Ele pode ser usado para autenticação de usuários, autorização de acesso (quem pode fazer o quê), e até para troca segura de informações entre serviços.
    4. Compatibilidade
      Por ser baseado em um padrão aberto, o JWT pode ser usado em praticamente qualquer linguagem de programação e integrado a diversas plataformas.

    Fluxo de Funcionamento do JWT

    1. Autenticação Inicial
      • O cliente (por exemplo, um aplicativo ou navegador) envia as credenciais de login ao servidor (usuário e senha).
      • O servidor valida as credenciais e, se corretas, gera um token JWT contendo as informações do usuário e o envia ao cliente.
    2. Uso do Token
      • O cliente armazena o token (geralmente no armazenamento local ou cookies).
      • Em cada requisição subsequente, o token é enviado no cabeçalho Authorization com o formato Bearer <token>.
    3. Validação no Servidor
      • O servidor verifica a assinatura do token e valida informações como expiração (exp) e emissor (iss).
      • Se válido, o acesso ao recurso solicitado é concedido.

    Quando usar JWT?

    O JWT é ideal para cenários onde:

    • APIs RESTful precisam ser protegidas sem estado (stateless).
    • Existe a necessidade de autenticar usuários em múltiplos serviços ou sistemas.
    • Você precisa de uma solução portátil e compatível entre diversas plataformas.

    Autenticação com JWT em APIs usando Delphi Horse

    No mundo das aplicações RESTful, a segurança é um ponto crítico. Quando lidamos com APIs, é essencial garantir que apenas usuários ou sistemas autorizados acessem os recursos disponíveis. Para isso, o uso de JWT (JSON Web Token) é uma das práticas mais comuns e eficazes.

    Neste artigo, vamos criar um exemplo prático com Delphi Horse, implementando duas APIs:

    1. API de Autenticação: Responsável por gerar o token JWT contendo o CNPJ do cliente como uma claim personalizada.
    2. API de Negócio (Business): Protegida com JWT, valida os tokens recebidos e permite acesso aos recursos apenas para usuários autenticados.

    Você aprenderá como:

    • Criar tokens JWT com claims personalizadas.
    • Proteger rotas usando middleware para validação de tokens.
    • Configurar e conectar duas APIs que trabalham juntas.

    1. Criando a API de Autenticação

    A API de autenticação será responsável por gerar tokens JWT com informações personalizadas, como o CNPJ. Esse token será usado pela API de negócio para validar o cliente.

    Configuração Inicial

    Primeiro, configure o projeto instalando as dependências necessárias com o Boss:

    Não vou entrar em detalhes sobre a criação de uma API Horse, suponho que já saiba como fazer isso. O que precisará a mais nesse artigo é adicionar a biblioteca JOSE do Paolo Rossi.

    Em seguida vamos criar uma classe para auxiliar na crição de CLAIMS personalizados. Os claims são como campos que podemos armazenar dentro do token. Existem os claims registrados, obrigatórios do JWT e os claims personalizados. Nesse exemplo vamos simular a adição de um CNPJ dentro do token.

    Essa classe adiciona o campo CNPJ ao payload do token JWT.

    Implementando o Endpoint de Geração do Token

    No DPR da nosssa api de autenticação, teremos um endpoint /token para ser chamado e gerar um token de autenticação, veja como fazemos.

    Teste da API de Autenticação

    Envie uma requisição para o endpoint /token com o CNPJ no header um token será retornado. Use o Postman, Inmsonia ou crie um pequeno projeto para fazer a requisição. Um exemplo de token gerado pode ser visto abaixo:

    2. Criando a API de Negócio (Business)

    A API de negócio utiliza o middleware HorseJWT para validar tokens e proteger rotas. Esse middleware pode ser encontrado na seção “Official Middlewares” no github da HashLoad.

    Configuração do Middleware JWT

    No projeto da API de negócio, implemente a validação de tokens no arquivo principal:

    Teste da API de Negócio

    Faça uma requisição para a rota protegida /clientes enviando o token no cabeçalho. Agora através do Postman, faça uma requisição enviando o token gerado na outra api. Caso esteja ok o token, você receberá o conteúdo como abaixo, simulando o resultado de uma rota.

    As rotas /ping e /version não estão sendo protegidas pelo JWT, você pode notar isso na chamada ao skiproutes.

    Participe da Comunidade no Telegram

    🚀 Quer continuar essa discussão e trocar ideias com outros desenvolvedores? Junte-se à nossa comunidade no Telegram! Lá, você pode comentar sobre o que achou deste artigo, tirar suas dúvidas e compartilhar suas experiências com Delphi e ainda discutir ou tirar suas dúvidas sobre os mais variados temas em uma comunidade com mais de 1.000 desenvolvedores.

    🔗 Clique aqui para entrar na comunidade

    Te vejo lá!

    O que virá a seguir?

    Criação de logs em APIs com Delphi Horse

    No próximo artigo, vamos explorar como implementar logs em APIs desenvolvidas com Delphi Horse. Veremos:

    • Configuração de middleware para registrar requisições e respostas.
    • Boas práticas para lidar com erros e gerar logs úteis para depuração e análise.

    Com essas técnicas, você terá controle total sobre o comportamento de suas APIs, garantindo maior segurança e rastreabilidade.

    Conclusão

    Neste artigo, criamos duas APIs utilizando o Delphi Horse e implementamos um fluxo completo de autenticação com JWT, incluindo claims personalizadas como o CNPJ. Esse modelo é altamente escalável e pode ser facilmente adaptado para aplicações maiores.

    Com essas ferramentas, você tem a base para criar aplicações RESTful seguras e eficientes.

    Se desejar expandir o tema, podemos explorar tópicos como:

    • Implementação de permissões avançadas.
    • Uso de banco de dados para validar credenciais na autenticação.
    • Monitoramento de APIs com ferramentas de log.

    Deixe sua resposta

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

    Posts Relacionados