ข้ามไปยังเนื้อหาหลัก

ปกป้อง 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;
};