Useful for securing webhooks.
On the webhook sender:
import { symmetric } from "secure-webhooks"
const secret = "some shared secret"
const payload = "...";
const signature = symmetric.sign(payload, secret);
sendToWebhookReceiver({
body: payload,
headers: {
"x-webhook-signature": signature
...
}
})
On the webhook receiver:
import { symmetric } from "secure-webhooks"
const secret = "some shared secret" // the same as above
app.post("/webhook-endpoint", (req, res) => {
const isTrustWorthy = symmetric.verify(
req.body, // 👈 needs to be exactly the same as above, make sure to disable any body parsing for this route
secret,
req.headers["x-webhook-signature"]
)
if (!isTrustWorthy) {
res.status(401).end("Not Authorized")
return
}
...
})
Same works with asymmetric mode:
import { asymmetric } from "secure-webhooks"