Skip to main content
Mọi gói tin ở cả hai chiều đều được ký bằng HMAC-SHA256 với khóa ký của kênh. Chữ ký đi trong header X-Hub-Signature-256 với tiền tố sha256=, kèm header X-Hub-Timestamp mang thời điểm gửi.

Cách tạo chữ ký

Chuỗi được ký là timestamp + dấu chấm + phần thân nguyên bản:
  • Ký trên đúng chuỗi byte đã gửi đi. Chuyển JSON thành đối tượng rồi tuần tự hóa lại, kể cả khi chỉ đổi thứ tự khóa, sẽ cho ra chữ ký khác.
  • Timestamp nằm trong chữ ký, nên kẻ bắt được gói tin không thể sửa nó. Gửi thời gian Unix hiện tại tính bằng giây.
  • Timestamp lệch quá 5 phút so với giờ máy chủ, theo cả hai hướng, đều bị từ chối. Hãy đồng bộ đồng hồ máy chủ bằng NTP.
  • Cơ chế không có ngoại lệ. Không có chế độ bỏ qua chữ ký, và không có miễn trừ cho kết nối chưa tạo khóa.

Ví dụ tạo chữ ký

Xác thực chữ ký chúng tôi gửi tới

Dùng lại đúng hàm sign ở trên, rồi so sánh bằng hàm so sánh thời gian hằng số để không rò rỉ thông tin qua thời gian xử lý:
Node.js (Express)
Hầu hết lỗi chữ ký đến từ việc framework web đã tự chuyển phần thân thành đối tượng trước khi bạn kịp đọc. Hãy cấu hình để giữ lại chuỗi byte nguyên bản (express.raw, bodyParser.raw, hoặc đọc trực tiếp từ luồng đầu vào) rồi mới phân tích JSON sau khi đã xác thực xong.