यह पृष्ठ मशीन द्वारा अनुवादित है। अंग्रेज़ी संस्करण मूल स्रोत है और अधिक सटीक या अधिक अद्यतन हो सकता है। अंग्रेज़ी में देखें

Webhook प्रमाणीकरण - अपने एंडपॉइंट सुरक्षित करें

finlight आपकी webhook डिलीवरी को सुरक्षित करने के लिए कई प्रमाणीकरण विधियाँ प्रदान करता है। प्रत्येक webhook में डिफ़ॉल्ट रूप से सिग्नेचर सत्यापन शामिल होता है, और बढ़ी हुई सुरक्षा के लिए वैकल्पिक अतिरिक्त प्रमाणीकरण परतें उपलब्ध हैं।

finlight चार प्रमाणीकरण विधियों का समर्थन करता है जिन्हें व्यक्तिगत रूप से या संयोजन में उपयोग किया जा सकता है:

कोई नहींकोई अतिरिक्त प्रमाणीकरण नहीं

कोई नहीं

डिफ़ॉल्ट सिग्नेचर सत्यापन के अलावा कोई अतिरिक्त प्रमाणीकरण नहीं।

कब उपयोग करें:

  • परीक्षण और विकास वातावरण
  • सुरक्षित नेटवर्क के पीछे आंतरिक एंडपॉइंट
  • जब सिग्नेचर सत्यापन पर्याप्त सुरक्षा प्रदान करता हो

नोट: इस सेटिंग की परवाह किए बिना, सिग्नेचर सत्यापन हर webhook अनुरोध में शामिल रहता है।


FINLIGHT_KEYकस्टम हेडर

X-Finlight-Key हेडर

प्रत्येक webhook अनुरोध के साथ एक कस्टम X-Finlight-Key हेडर में आपकी API कुंजी भेजता है।

कॉन्फ़िगरेशन:

  • webhook सेटअप के दौरान अपनी API कुंजी प्रदान करें
  • कुंजी 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. आपके webhook की गुप्त कुंजी का उपयोग करके HMAC-SHA256 से संदेश पर हस्ताक्षर करता है
  4. हेडर में सिग्नेचर और टाइमस्टैम्प दोनों भेजता है

शामिल किए गए हेडर:

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

सिग्नेचर एल्गोरिदम:

message = timestamp + '.' + raw_request_body
signature = HMAC-SHA256(message, webhook_secret)

जब कोई X-Webhook-Timestamp हेडर मौजूद नहीं होता, तो संदेश केवल रॉ बॉडी होता है। परिणाम की तुलना स्थिर समय में करें, और ऐसी डिलीवरी अस्वीकार करें जिनका टाइमस्टैम्प पाँच मिनट से अधिक पुराना हो।

आधिकारिक क्लाइंट से सत्यापन

प्रत्येक क्लाइंट लाइब्रेरी एक हेल्पर के साथ आती है जो पूरी जाँच आपके लिए करती है: यह हस्ताक्षर पर sha256= उपसर्ग स्वीकार करती है, स्थिर समय में तुलना करती है, पाँच-मिनट की रीप्ले विंडो लागू करती है, और पार्स किया गया लेख लौटाती है। सत्यापन विफल होने पर यह अपवाद फेंकती है या त्रुटि लौटाती है — इसका उत्तर हमेशा 4xx से दें और पेलोड को कभी प्रोसेस न करें।

webhook सत्यापित करें

import express from 'express'
import { WebhookService } from 'finlight-client'

const app = express()

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  try {
    const article = WebhookService.constructEvent(
      req.body.toString(),
      req.headers['x-webhook-signature'] as string,
      process.env.WEBHOOK_SECRET!,
      req.headers['x-webhook-timestamp'] as string,
    )

    console.log('New article:', article.title)
    res.sendStatus(200)
  } catch (err) {
    console.error('Webhook verification failed:', err)
    res.sendStatus(400)
  }
})

SECURITYआवश्यक दिशानिर्देश

सुरक्षा सर्वोत्तम प्रथाएँ

टाइमस्टैम्प सत्यापन

ऊपर दिए गए constructEvent हेल्पर पहले से ही पाँच-मिनट की रीप्ले विंडो लागू करते हैं, इसलिए इसकी आवश्यकता केवल तभी है जब आप हस्ताक्षर स्वयं सत्यापित करते हैं:

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 सेटअप मार्गदर्शन के लिए, मुख्य webhooks दस्तावेज़ देखें। व्यापक परीक्षण के लिए, webhook परीक्षण गाइड देखें।