Stripe
Header Stripe-Signature with timestamp t and HMAC-SHA256 v1 over {timestamp}.{raw_body}.
- Read the raw body before JSON parse.
- Extract
tandv1. - HMAC with
whsec_.... - Constant-time compare.
- Reject stale timestamps (replay window).
Stripe, GitHub, and Slack all HMAC-sign payloads. Test verification in your browser — signing secrets never leave the device.
Webhook signature checks are a common place to leak signing secrets into random “online HMAC” sites. This guide covers how each provider signs, then how to reproduce the header privately with the Webhook HMAC Signer.
Header Stripe-Signature with timestamp t and HMAC-SHA256 v1 over {timestamp}.{raw_body}.
t and v1.whsec_....Header X-Hub-Signature-256 as sha256= plus hex HMAC-SHA256 of the raw body.
Header X-Slack-Signature from base string v0:{timestamp}:{raw_body}, HMAC-SHA256, prefixed v0=.
X-Slack-Request-Timestamp.Stripe, GitHub, or Slack — matching that provider’s signed string.
Everything stays in the tab. Use a test secret, never production, if you can.
Build the expected header, or check an incoming header against the payload.
Need audit evidence? Download a privacy receipt after the job.