Perilaku pengiriman
Diambil dari dokumentasi resmi vendor, terakhir diperiksa 2026-08-06. Jika vendor tidak menyebut angka, tabel ini juga tidak mencantumkannya.
| Batas waktu respons | tidak dipublikasikan vendor |
|---|---|
| Percobaan ulang | tidak dipublikasikan vendor |
| Berhenti mencoba | tidak dipublikasikan vendor |
Tanda tangan
Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.
| Algoritma | HMAC-SHA256 |
|---|---|
| Payload bertanda tangan | raw body, no timestamp |
| Encoding | hex |
| Header | sentry-hook-signature |
| Toleransi | tidak diberlakukan |
Verifikasi
Raw body dari permintaan, byte demi byte, sebelum parsing JSON apa pun. Setiap skema di halaman ini rusak begitu framework melakukan serialisasi ulang pada payload.
const crypto = require("node:crypto");
// hex(HMAC-SHA256(client secret, raw body)) — no timestamp anywhere
const expected = crypto
.createHmac("sha256", clientSecret) // Settings → Developer Settings
.update(rawBody)
.digest("hex");
const received = Buffer.from(req.headers["sentry-hook-signature"] ?? "");
const wanted = Buffer.from(expected);
// timingSafeEqual throws on a length mismatch, so check that first.
const valid =
received.length === wanted.length && crypto.timingSafeEqual(received, wanted);Yang sering menjebak
Tidak ada bagian payload yang ditandatangani yang kedaluwarsa: tanpa stempel waktu, permintaan yang disadap tetap lolos verifikasi sebulan kemudian, sama mulusnya seperti saat pertama dikirim. Idempotensi di sisi Anda adalah satu-satunya penghalang antara rekaman yang di-replay dan efek samping yang berjalan lagi.
Baca juga
AnyHook berada di depan endpoint yang menerima webhook dari Sentry: AnyHook menjawab dalam sekitar satu detik, mencoba ulang sesuai jadwalnya sendiri saat server Anda mati, dan menyimpan setiap event agar dapat diputar ulang (replay). Ganti satu URL, kode Anda tetap.