O que faz este calculador de assinatura HTTP
"A assinatura de solicitação calculada não corresponde à assinatura que você forneceu" é um dos erros mais frustrantes no trabalho da API, porque o servidor nunca diz a você qual passo deu errado. Esta calculadora reproduz todo o processo de assinatura para AWS Signature Version 4, Alibaba Cloud ACS3-HMAC-SHA256, Tencent Cloud TC3-HMAC-SHA256 e OAuth 1.0a HMAC-SHA1, e mostra todos os valores intermediários: a solicitação canônica, seu hash, a cadeia para assinar, a chave de assinatura derivada e a assinatura final e cabeçalhos. Também verifica assinaturas de webhook recebidas do GitHub, Stripe e Slack. Toda a criptografia usa a API Web Crypto do navegador, para que as chaves secretas fiquem no seu dispositivo.
Como usar
- Escolha a conta do fornecedor.
- Digite o método, URL, cabeçalhos (um
Name: valuepor linha) e corpo exatamente como seu código os envia. - Insira a chave de acesso, a chave secreta e, se aplicável, a região e o serviço. Clique em Use current time ou aponte um selo de tempo fixo para comparar com uma solicitação capturada.
- Compare cada passo com o que o seu SDK ou código registra. O primeiro passo que difere é onde está o insecto.
- Para webhooks, colar o corpo do pedido bruto byte-by-byte, o cabeçalho da assinatura e o seu segredo de assinatura, e a ferramenta diz-lhe se ele corresponde.
Causas comuns de descoordenações de assinatura
- Codificação URI canônica: AWS codifica cada segmento de caminho; S3 não codifica duplamente.
- ** Ordenação da consulta:** Os parâmetros devem ser ordenados por chave codificada, e os valores vazios ainda precisam de
=. - ** Cabeçalhos assinados:** Os nomes dos cabeçalhos são minúsculos, cortados, ordenados e unidos com
;. Esquecerhostoux-amz-dateé comum. - Hash de carga útil: O S3 requer o cabeçalho
x-amz-content-sha256; outros serviços apenas hasham o corpo. - ** Desvio do relógio:** a maioria dos prestadores rejeita pedidos com mais de 515 minutos de atraso.
- ** Webhooks:** frameworks muitas vezes analisam e re-serializar JSON antes de vê-lo. Verifique contra os bytes brutos, não um objeto recodificado. As linhas são
timestamp.body, as linhas sãov0:timestamp:body.