Security
Learn how to secure your webhook endpoints and validate webhook signatures
Signature Verification
Every webhook request includes a X-Zellify-Signature
header containing a HMAC SHA-256 hash of the request body. Here's how to verify it:
import crypto from 'crypto';
function verifyWebhookSignature(
payload: string,
signature: string,
secret: string
): boolean {
const hmac = crypto.createHmac('sha256', secret);
const computedSignature = hmac.update(payload).digest('hex');
return crypto.timingSafeEqual(
Buffer.from(computedSignature, 'hex'),
Buffer.from(signature, 'hex')
);
}
// In your webhook handler
app.post('/webhooks', (req, res) => {
const signature = req.headers['x-zellify-signature'];
const isValid = verifyWebhookSignature(
JSON.stringify(req.body),
signature,
process.env.WEBHOOK_SECRET
);
if (!isValid) {
return res.status(401).json({ error: 'Invalid signature' });
}
// Process the webhook...
});
Always validate webhook signatures before processing any webhook data. This prevents unauthorized access and ensures the authenticity of events.
Last updated