Webhook / signature / replay boundary

Separate Webhook signatures and replay conditions

Review signature, timestamp, replay and idempotency conditions that are often mixed together at receipt time. Real Webhooks and secrets are never used; save a receive review note locally.

Five receive boundaries

A matching signature does not prove that a timestamp is fresh, a notification is not a replay, or processing is idempotent. Record each receive check separately.

signature ≠ fresh ≠ idempotent / verify → reject → record
AxisReview
signatureVerify the signature without handing off the secret itself.
timestampSet a time window and reject old notifications.
replayDetect and reject a repeated event or nonce.
idempotencyPrevent duplicate effects when a delivery is retried.
fail-closedDo not process a notification that cannot be verified.

Safe review order

  1. Separate signature verification from the timestamp window.
  2. Choose an event identifier for replay detection.
  3. Check the result of a retry under idempotency.
  4. Approve the local note before returning to a real receiver.

This page never sends or receives a real Webhook and never accepts secrets or user payloads. It uses synthetic cases only.

Six synthetic cases

caseresult
signature-validSignature valid
timestamp-windowTimestamp window
replay-detectedReplay detected
idempotency-keyIdempotency key
signature-mismatchReject mismatch
local-noteLocal handoff