SIGNATUR
Prüfen Sie, ob die Benachrichtigung von Cord stammt.
Jede Zustellung enthält X-Cord-Signature-V1 mit einem Zeitstempel und dem HMAC-SHA256 des unverarbeiteten Bodys, signiert mit dem Secret Ihres Endpoints. Sie prüfen die Signatur mit wenigen Zeilen, bevor Sie das Ereignis verarbeiten, und der Zeitstempel schützt Sie davor, dass jemand eine alte Zustellung erneut einspielt.
- X-Cord-Event-Id zum Deduplizieren, ohne den Body zu lesen
- X-Cord-Attempt gibt an, um welchen Zustellversuch es sich handelt
- Während einer Rotation wird mit dem neuen und dem bisherigen Secret signiert
import crypto from 'node:crypto';
// header = req.headers['x-cord-signature-v1'], rawBody = roher, ungeparster Body
export function verifyCord(rawBody, header, secret) {
const parts = header.split(',');
const t = parts.find((p) => p.startsWith('t='))?.slice(2);
if (!t || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const expected = crypto.createHmac('sha256', secret)
.update(`${t}.${rawBody}`).digest();
// während einer Rotation kommen zwei v1: Ein Treffer genügt
return parts.filter((p) => p.startsWith('v1=')).some((p) => {
const got = Buffer.from(p.slice(3), 'hex');
return got.length === expected.length && crypto.timingSafeEqual(got, expected);
});
}