पाठ 20 / 25
Webhooks और Credentials सुरक्षित करना
Webhook calls authenticate करें, signatures जाँचें और encryption key की रक्षा करें।
सार्वजनिक URL खुला दरवाज़ा है
जिसे webhook URL मिल जाए वह उसे चला सकता है। Webhook node पर authentication चालू करें (Header Auth या Basic Auth), या ऐसा signature जाँचें जिसे भेजने वाला साझा secret से request body पर निकालता है। Instance की भी रक्षा करें: उसे HTTPS पर चलाएँ, access control के बिना editor सार्वजनिक न करें, और N8N_ENCRYPTION_KEY सुरक्षित रखें, क्योंकि database के credentials उसी से encrypted हैं।
HMAC signature जाँचना
इसे Code node में चलाएँ। timingSafeEqual constant समय में तुलना करता है। यह Node.js में चला: SHA-256 hex digest 64 अक्षर का है और अपरिवर्तित body मेल खाती है। असली flow में आप caller के भेजे signature header से तुलना करते हैं, raw body के साथ।
const crypto = require("crypto");
const secret = "s3cret"; // from a credential, not hard-coded
const body = '{"event":"paid"}';
const expected = crypto.createHmac("sha256", secret).update(body).digest("hex");
const received = expected; // in a real flow: the header value
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(received));
console.log(expected.length, ok);
Output:
64 true
Encryption key का backup लें
N8N_ENCRYPTION_KEY खो जाए तो सहेजे credentials decrypt नहीं हो सकते। इसे environment variable से स्पष्ट रूप से सेट करें, password manager में रखें, और Git में कभी commit न करें।
त्वरित जाँच: Webhook node पर authentication चालू करने से क्या रुकता है?
- Workflow का कभी चलना
- URL जानने वाले किसी भी व्यक्ति द्वारा workflow चलाना
- JSON का उपयोग
- Logging
Answer
URL जानने वाले किसी भी व्यक्ति द्वारा workflow चलाना — सिर्फ़ वैध credentials या signatures दिखाने वाले callers ही इसे चला सकते हैं।