Assinatura de Requisições
Nossa API utiliza assinatura de requisições baseada em JWT para autenticar e verificar a integridade das suas requisições. Este guia explica como implementar a assinatura de requisições em suas aplicações.Visão Geral
Cada requisição para nossa API deve incluir um token JWT assinado no cabeçalho Authorization. O token contém declarações sobre a requisição e é assinado usando sua chave privada com o algoritmo RS256.1
Preparar credenciais
Você precisa de duas credenciais:
- Chave de API: Seu identificador único
- Chave Privada: Sua chave privada RSA em formato PEM
2
Extrair caminho da URL
Extraia o caminho e os parâmetros de consulta da URL da requisição.
Não inclua o domínio ou protocolo nos dados assinados.
3
Gerar hash do corpo
Calcule um hash SHA-256 do corpo da requisição para garantir integridade.
4
Criar e assinar JWT
Crie um JWT com declarações específicas e assine-o com sua chave privada.
5
Adicionar cabeçalho Authorization
Inclua o JWT assinado no cabeçalho Authorization como um token Bearer.
Implementação
Abaixo está uma implementação em TypeScript que você pode usar como referência para outras linguagens:Estrutura do Payload JWT
O payload JWT deve conter as seguintes declarações:O caminho da URL com parâmetros de consulta (excluindo o domínio).
Exemplo:
/v1/resources?filter=activeHorário de emissão como timestamp Unix (segundos desde a época).
Horário de expiração como timestamp Unix. Deve ser definido como
iat + 55 segundos.Sua chave de API.
Hash SHA-256 do corpo da requisição como uma string hexadecimal.
Implementações em Linguagens Específicas
- Node.js
- Python
- Java
- PHP
Testando Sua Implementação
Você pode verificar se sua implementação está funcionando corretamente:- Gerando uma requisição assinada
- Decodificando o JWT em jwt.io para verificar as declarações
- Fazendo uma requisição de teste para nosso endpoint de API
Certifique-se de que o corpo da requisição seja idêntico entre a geração da assinatura e a requisição real.
Mesmo uma única diferença de espaço em branco resultará em um hash diferente e falha na validação da assinatura.
Problemas Comuns
Falha na Verificação da Assinatura
Falha na Verificação da Assinatura
Isso normalmente significa:
- O formato da sua chave privada está incorreto
- O hash do corpo não corresponde ao corpo da requisição real
- O JWT expirou (deve ser válido apenas por 55 segundos)
Declarações Obrigatórias Ausentes
Declarações Obrigatórias Ausentes
Certifique-se de que seu JWT inclua todas as declarações obrigatórias:
uri, iat, exp, sub e bodyHash.Formato de URL Incorreto
Formato de URL Incorreto
A declaração
uri deve incluir apenas o caminho e a string de consulta, não o domínio ou protocolo.Melhores Práticas de Segurança
- Armazene sua chave privada com segurança e nunca a exponha em código do lado do cliente
- Gere um novo JWT para cada requisição
- Mantenha o tempo de expiração curto (55 segundos) para evitar ataques de repetição
- Implemente tratamento adequado de erros para falhas de autenticação