Een GitHub-webhook lokaal testen
Om een GitHub-webhook-handler te valideren hoef je geen commits te pushen of echte PR's te openen. Genereer een met HMAC-SHA256 gesigneerd GitHub-event, bewerk de payload (repo, branch, auteur) en stuur het naar je lokale server. Je X-Hub-Signature-256-verificatie wordt meteen getest.
De signatuur server-side verifiëren
import crypto from 'crypto';
const sig = req.headers['x-hub-signature-256'];
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected));Om een echte GitHub-webhook op je machine te ontvangen zonder te deployen, stel je de URL van je Relay-tunnel in bij de repo-instellingen.
Veelgestelde vragen
Hoe simuleer ik een GitHub-push op mijn lokale server?
Kies het push-event hierboven, plak het webhook-secret dat in je repo is geconfigureerd, geef de URL van je handler op (via Relay) en verstuur. De X-Hub-Signature-256-header wordt in HMAC-SHA256 berekend zoals GitHub dat doet.
Wat is het verschil tussen X-Hub-Signature en X-Hub-Signature-256?
X-Hub-Signature gebruikt SHA-1 (legacy), X-Hub-Signature-256 gebruikt SHA-256 (aanbevolen). De generator produceert beide headers om alle gevallen te dekken.
Hoe verifieer ik de signatuur server-side?
Bereken HMAC-SHA256(rawBody, secret) en vergelijk in constante tijd met de waarde van de header (na 'sha256='). Zie het codevoorbeeld hieronder.
Kan ik pull_request en issues ook testen?
Ja, de events push, pull_request en issues zijn beschikbaar, met een correcte X-GitHub-Event-header voor elk.