Xác minh X-Device-Signature offline với DevToys
Đôi khi bạn muốn kiểm tra một chữ ký webhook mà không dán signing secret vào bất kỳ website nào. DevToys là một bộ công cụ desktop chạy hoàn toàn offline — secret không bao giờ rời khỏi máy bạn.
DevToys là gì
DevToys là một "con dao Thụy Sĩ cho lập trình viên" chạy offline — một app desktop gom các generator, converter và encoder mà nếu không thì bạn phải mở cả tá web tool. Cái ta quan tâm ở đây là generator HMAC của nó.
Vì sao offline quan trọng với signing secret
Chữ ký webhook của UnifyPort là một HMAC dùng signing_secret của bạn làm khóa. Các công cụ hash trên web thì tiện, nhưng bắt bạn dán secret đó vào một trang. DevToys tính mọi thứ cục bộ — không gửi đi đâu cả — nên nó an toàn hơn khi secret là cái bạn thực sự dùng.
Xác minh X-Device-Signature trong DevToys
UnifyPort ký mỗi delivery như sau:
Để tái hiện bằng tay:
- 1. Mở generator HMAC trong DevToys và đặt hàm băm là
SHA256. - 2. Dán signing secret vào ô key dưới dạng văn bản UTF-8 thuần.
- 3. Ở ô input, dán đúng
<timestamp>.<raw_body>— giá trịX-Device-Timestamp, một dấu chấm ASCII, rồi đến các byte raw body: - 4. So đầu ra hex chữ thường với header
X-Device-Signature. Khớp từng byte nghĩa là secret, timestamp và body đều ăn khớp.
Khi nào CyberChef hoặc code là lựa chọn tốt hơn
- CyberChef. Nếu muốn nối các bước — base64-decode body rồi HMAC — trong một recipe, hướng dẫn CyberChef của chúng tôi linh hoạt hơn, đổi lại là phải dán vào trang web.
- Trong code. Với bất cứ thứ gì lặp lại, hãy xác minh trong handler bằng so sánh thời gian hằng (
timingSafeEqual,hmac.compare_digest,hmac.Equal) — đừng bao giờ dùng==.
Lấy dữ liệu đầu vào ở đâu
- Để lấy
X-Device-Timestampvà raw body đưa vào, hãy bắt một delivery bằng webhook.site hoặc chuyển tiếp một cái về localhost bằng smee.io. - Thích trình duyệt và sự tiện lợi của một recipe chia sẻ được? Hướng dẫn CyberChef chạy cùng thuật toán.
Câu hỏi thường gặp
- DevToys chạy trên nền tảng nào?
- DevToys là app desktop offline cho Windows và macOS. Dùng nó khi bạn không muốn dán signing secret vào một web form.
- Vì sao DevToys an toàn hơn công cụ HMAC trên web?
- Nó chạy hoàn toàn trên máy bạn — signing secret bạn gõ không bao giờ được gửi tới server. Công cụ web cũng có thể là client-side, nhưng với app desktop bạn không phải tin vào điều đó.
- Chữ ký tôi tính không khớp X-Device-Signature — sai ở đâu?
- Ba nguyên nhân thường gặp: sai signing secret; body bị thay đổi trước khi băm (JSON tái tuần tự hóa, bỏ khoảng trắng, chuẩn hóa unicode); hoặc timestamp đọc nhầm header — chỉ
X-Device-Timestampđược ký. Input phải đúng là<timestamp>.<raw_body>với một dấu chấm thật.
Khi đã khớp
Chuyển cùng phép tính đó vào handler — crypto.createHmac trong Node, hmac.new trong Python, hmac.New trong Go — và luôn so sánh bằng hàm thời gian hằng, đừng bao giờ dùng ==.