Ga naar hoofdinhoud

Webhookbeveiliging

Elk webhookverzoek van ConsentForge bevat een HMAC-SHA256-handtekening. Verifieer deze handtekening voordat u de payload verwerkt om te zorgen dat het verzoek echt is en niet is gemanipuleerd.

Verzoekheaders

HeaderBeschrijving
X-ConsentForge-SignatureHMAC-SHA256 hex-samenvatting van {timestamp}.{body}
X-ConsentForge-TimestampUnix-tijdstempel (seconden) wanneer de gebeurtenis werd verzonden
X-ConsentForge-Delivery-IDUnieke ID voor deze aflevering (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}.{ruwe_verzoektekst}
  4. Bereken HMAC-SHA256 van de ondertekeningsstring met uw webhookgeheim
  5. Vergelijk (tijdveilig) met de ontvangen handtekening
  6. Weiger als het tijdstempel meer dan 5 minuten oud is (bescherming tegen replay-aanvallen)

Codevoorbeelden

function verifyConsentForgeWebhook(
string $rawBody,
string $signature,
string $timestamp,
string $secret
): bool {
// Weigeren als te oud (5 minuten)
if (abs(time() - (int)$timestamp) > 300) {
return false;
}

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

return hash_equals($expected, $signature);
}

// Gebruik in een 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 opnieuw geprobeerde afleveringen te dedupliceren. Sla verwerkte afleverings-ID's op en sla duplicaten over.

Geheimsrotatie

Om uw webhookgeheim te roteren:

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