Ga naar hoofdinhoud

Webhook-beveiliging

Elk webhookverzoek van ConsentForge bevat een HMAC-SHA256-handtekening. Verifieer deze handtekening voor verwerking van de payload om te verzekeren dat het verzoek authentiek is en niet is gemanipuleerd.

Verzoekheaders

HeaderBeschrijving
X-ConsentForge-SignatureHMAC-SHA256 hexadecimale samenvatting van {timestamp}.{body}
X-ConsentForge-TimestampUnix-tijdstempel (seconden) wanneer de gebeurtenis is verzonden
X-ConsentForge-Delivery-IDUniek ID voor deze levering (gebruik voor idempotentie)

Verificatiealgoritme

  1. Lees X-ConsentForge-Timestamp uit de verzoekheader
  2. Lees X-ConsentForge-Signature uit de verzoekheader
  3. Bouw de ondertekeningsstring: {timestamp}.{raw_request_body}
  4. Bereken HMAC-SHA256 van de ondertekeningsstring met uw webhookgeheim
  5. Vergelijk (tijdsveilig) met de ontvangen handtekening
  6. Weiger als tijdstempel meer dan 5 minuten oud is (bescherming tegen replay-aanvallen)

Codevoorbeelden

function verifyConsentForgeWebhook(
string $rawBody,
string $signature,
string $timestamp,
string $secret
): bool {
// Reject if too old (5 minutes)
if (abs(time() - (int)$timestamp) > 300) {
return false;
}

$signingString = $timestamp . '.' . $rawBody;
$expected = hash_hmac('sha256', $signingString, $secret);

return hash_equals($expected, $signature);
}

// Usage in a Laravel controller:
$rawBody = $request->getContent();
$signature = $request->header('X-ConsentForge-Signature');
$timestamp = $request->header('X-ConsentForge-Timestamp');
$secret = config('services.consentforge.webhook_secret');

if (!verifyConsentForgeWebhook($rawBody, $signature, $timestamp, $secret)) {
return response('Unauthorized', 401);
}

$payload = $request->json()->all();

Idempotentie

Gebruik X-ConsentForge-Delivery-ID om herhaalde leveringen te dedupliceren. Sla verwerkte levering-ID's op en sla duplicaten over.

Geheimrotatie

Om uw webhookgeheim te roteren:

  1. Genereer een nieuw geheim in het Dashboard (oud geheim nog 24u actief)
  2. Werk uw server bij om het nieuwe geheim te gebruiken
  3. Na 24u wordt het oude geheim ongeldig