Skip to content

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();
});