Assinaturas HMAC

Como confirmar que o pedido veio mesmo do DroidSender e não de outra pessoa.

Todos os pedidos levam o cabeçalho X-DroidSender-Signature, com um HMAC-SHA256 do corpo do pedido usando o segredo do teu webhook. Verificar a assinatura é o que impede alguém que descubra o teu URL de te enviar eventos falsos.

javascript
const crypto = require("crypto");

function assinaturaValida(corpoBruto, assinatura, segredo) {
  const esperada = crypto
    .createHmac("sha256", segredo)
    .update(corpoBruto)
    .digest("hex");

  // comparacao em tempo constante: um === simples deixa medir o segredo
  return crypto.timingSafeEqual(
    Buffer.from(esperada),
    Buffer.from(assinatura),
  );
}

Usa o corpo em bruto

A assinatura é calculada sobre o JSON tal como chegou. Se o verificares depois de o converter em objeto e voltar a serializar, os espaços mudam e a assinatura nunca bate certo.