تمت ترجمة هذه الصفحة آليًا. النسخة الإنجليزية هي المصدر وقد تكون أكثر دقة أو أحدث. العرض بالإنجليزية

مصادقة Webhook - أمّن نقاط النهاية الخاصة بك

يوفّر finlight طرق مصادقة متعدّدة لتأمين عمليات تسليم webhook الخاصة بك. يتضمّن كل webhook التحقّق من التوقيع افتراضيًا، مع طبقات مصادقة إضافية اختيارية لتعزيز الأمان.

يدعم finlight أربع طرق مصادقة يمكن استخدامها بشكل فردي أو مجتمعة:

بلابدون مصادقة إضافية

بلا

لا توجد مصادقة إضافية بخلاف التحقّق الافتراضي من التوقيع.

متى تُستخدم:

  • بيئات الاختبار والتطوير
  • نقاط النهاية الداخلية خلف شبكات آمنة
  • عندما يوفّر التحقّق من التوقيع أمانًا كافيًا

ملاحظة: يظلّ التحقّق من التوقيع مُضمَّنًا في كل طلب webhook بغضّ النظر عن هذا الإعداد.


FINLIGHT_KEYترويسة مخصّصة

ترويسة X-Finlight-Key

ترسل مفتاح API الخاص بك في ترويسة مخصّصة X-Finlight-Key مع كل طلب webhook.

التهيئة:

  • قدّم مفتاح API الخاص بك أثناء إعداد webhook
  • سيُضمَّن المفتاح في ترويسة X-Finlight-Key

التنفيذ: ينبغي أن تتحقّق نقطة النهاية الخاصة بك من الترويسة الواردة:

const finlightKey = req.headers['x-finlight-key']
if (finlightKey !== 'your-expected-api-key') {
  return res.status(401).send('Invalid API key')
}

الترويسات المُرسَلة:

X-Finlight-Key: your-api-key-value
X-Webhook-Signature: sha256=signature
X-Webhook-Timestamp: 2024-01-15T10:30:00.000Z

BASICاسم المستخدم/كلمة المرور

المصادقة الأساسية

مصادقة HTTP الأساسية ببيانات اعتماد اسم المستخدم/كلمة المرور.

التهيئة:

  • عيّن اسم المستخدم وكلمة المرور أثناء إعداد webhook
  • تُرمَّز بيانات الاعتماد بترميز base64 وتُرسَل في ترويسة Authorization

التنفيذ: تتلقّى نقطة النهاية الخاصة بك مصادقة HTTP الأساسية القياسية:

const auth = req.headers.authorization
if (!auth || !auth.startsWith('Basic ')) {
  return res.status(401).send('Missing Basic Auth')
}

const credentials = Buffer.from(auth.slice(6), 'base64').toString()
const [username, password] = credentials.split(':')

if (username !== 'expected-user' || password !== 'expected-pass') {
  return res.status(401).send('Invalid credentials')
}

الترويسات المُرسَلة:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
X-Webhook-Signature: sha256=signature
X-Webhook-Timestamp: 2024-01-15T10:30:00.000Z

SIGNATUREمُضمَّن دائمًا

التحقّق من التوقيع

أمان تلقائي: يتضمّن كل طلب webhook التحقّق من التوقيع بغضّ النظر عن طريقة المصادقة التي تختارها.

كيف يعمل:

  1. يُنشئ finlight طابعًا زمنيًا عند إرسال webhook
  2. ينشئ رسالة عبر الدمج: timestamp + '.' + payload
  3. يوقّع الرسالة باستخدام HMAC-SHA256 بمفتاح webhook السري الخاص بك
  4. يرسل كلًّا من التوقيع والطابع الزمني في الترويسات

الترويسات المُضمَّنة:

X-Webhook-Signature: sha256=computed-signature
X-Webhook-Timestamp: 2024-01-15T10:30:00.000Z

خوارزمية التوقيع:

message = timestamp + '.' + JSON.stringify(payload)
signature = HMAC-SHA256(message, webhook_secret)

SECURITYإرشادات أساسية

أفضل ممارسات الأمان

التحقّق من الطابع الزمني

امنع هجمات إعادة التشغيل عبر التحقّق من الطوابع الزمنية للطلبات:

function isTimestampValid(timestamp, toleranceSeconds = 300) {
  const now = Date.now()
  const requestTime = new Date(timestamp).getTime()
  const difference = Math.abs(now - requestTime) / 1000

  return difference <= toleranceSeconds
}

التخزين الآمن لبيانات الاعتماد

  • متغيّرات البيئة: خزّن جميع الأسرار في متغيّرات البيئة
  • إدارة الأسرار: استخدم AWS Secrets Manager أو HashiCorp Vault أو ما شابه
  • لا تكتبها ضمن الكود مطلقًا: لا تُودِع الأسرار في نظام التحكّم بالإصدارات أبدًا
  • التدوير المنتظم: حدِّث أسرار webhook دوريًا

للحصول على إرشادات إعداد webhook، راجع وثائق webhook الرئيسية. وللاختبار الشامل، راجع دليل اختبار webhook.