ปกป้อง Webhook (Secure webhooks)
เมื่อเซิร์ฟเวอร์ของคุณพร้อมรับคำขอ webhook แล้ว คุณอาจต้องการให้แน่ใจว่าสามารถจัดการคำขอเหล่านั้นได้อย่างปลอดภัย Logto จะสร้างลายเซ็นสำหรับ payload ของแต่ละคำขอ webhook ซึ่งช่วยให้คุณตรวจสอบได้ว่าคำขอนั้นมาจาก Logto จริง
รับคีย์สำหรับลงลายเซ็น
คุณต้องรับคีย์สำหรับลงลายเซ็นจากหน้ารายละเอียด webhook ใน Logto Console > Webhooks เพื่อใช้ตรวจสอบลายเซ็น
ตรวจสอบลายเซ็น
ดึงลายเซ็นจาก header logto-signature-sha-256
ของคำขอ webhook
หลังจากนั้น คุณควรสร้างลายเซ็นโดยใช้คีย์สำหรับลงลายเซ็นของคุณและเนื้อหา body ของ webhook request แล้วตรวจสอบว่าผลลัพธ์ตรงกับลายเซ็นที่ได้จาก Logto หรือไม่
ควรใช้ raw body ของ webhook request ในการสร้างลายเซ็น หลีกเลี่ยงการใช้ body ที่ถูกแปลงแล้ว เพราะเซิร์ฟเวอร์อาจประมวลผลข้อมูลก่อนถึง handler ของ webhook endpoint
Logto ใช้ HMAC hex digest ในการคำนวณลายเซ็น
ตัวอย่างการตรวจสอบลายเซ็นใน Node.js:
import { createHmac } from 'node:crypto';
// ฟังก์ชันตรวจสอบลายเซ็น webhook
export const verify = (signingKey: string, rawBody: Buffer[], expectedSignature: string) => {
const hmac = createHmac('sha256', signingKey);
hmac.update(rawBody);
const signature = hmac.digest('hex');
return signature === expectedSignature;
};