Xác thực Webhook
Khi có sự kiện xảy ra, Xe dù sẽ gửi thông báo webhook tới URL bạn đã cung cấp với header như sau:
X-Xedu-Timestamp: Timestamp của thông báo, được tính bằng giây từ Unix epoch.X-Xedu-Signature: Chữ ký của thông báo, được tạo bằng cách mã hóa sha256(secret_key+timestamp+payload).
NOTE
Để xác thực thông báo webhook, bạn cần so sánh chữ ký của thông báo với chữ ký bạn tạo ra từ payload của thông báo và secret key của bạn.
Dưới đây là một ví dụ về 1 middleware xác thực webhook bằng Node.js:
javascript
import crypto from "crypto";
app.use((req, res, next) => {
const signature = req.get("X-Xedu-Signature");
const timestamp = req.get("X-Xedu-Timestamp");
const payload = JSON.stringify(req.body);
const hmac = crypto
.createHmac(
"sha256",
`${process.env.WEBHOOK_SECRET}+${timestamp}+${payload}`
)
.update(payload)
.digest("hex");
if (signature !== hmac) {
return res.status(403).send("Invalid signature");
}
next();
});