कच्चे बॉडी पर HMAC के साथ साइन किए गए आउटबाउंड वेबहुक्स, एक स्थिर डिलीवरी पहचान, मृत-पत्र में सीमित पुनः प्रयास, क्लॉक-स्क्यू सहिष्णु टाइमस्टैम्प, और कॉलबैक URL में कोई गुप्त सामग्री नहीं।
पैकेज स्थिति: संदर्भ संदर्भ मानव समीक्षा के लिए तैयार। अनुबंध और परीक्षण परिदृश्य पूर्ण हैं, लेकिन यह दावा नहीं किया गया है कि कोई अपनाने वाला कार्यान्वयन उन्हें पार कर चुका है।
निर्णय
आउटबाउंड इंटीग्रेशन इवेंट्स को साइन किए गए HTTP POST बॉडी के रूप में वितरित किया जाता है। प्रत्येक डिलीवरी की एक टिकाऊ पहचान होती है जो डोमेन इवेंट आईडी से भिन्न होती है ताकि पुनः प्रयास एक ही डिलीवरी बने रहें। HMAC कच्चे बाइट्स को कवर करता है जो प्रेषित किए जाएंगे, एक कुंजी आईडी और प्रेषक टाइमस्टैम्प से बंधे होते हैं। गुप्त जानकारी कभी क्वेरी पैरामीटर के रूप में प्रकट नहीं होती। पुनः प्रयास एक नामित अनुसूची प्रोफ़ाइल का पालन करते हैं जिसमें लेबल्ड जिटर होता है, फिर वे मृत-पत्र में प्रवेश करते हैं। डिलीवरी कम से कम एक बार होती है; रिसीवर डिलीवरी आईडी पर डुप्लिकेट को हटाते हैं।
दायरा
- एक इवेंट कमिट होने के बाद आउटबॉक्स में वर्कर प्रयास।
- साइनिंग हेडर, टाइमस्टैम्प स्क्यू, कुंजी रोटेशन पहचानकर्ता, पुनः प्रयास सीमा, मृत-पत्र, और टर्मिनल स्थिति।
इस ब्लॉक के बाहर
- डोमेन ट्रांजैक्शन के साथ एटॉमिक आउटबॉक्स लेखन (संबंधित आउटबॉक्स पैकेज)।
- एक पार्टनर इनबाउंड सिग्नेचर कैसे सत्यापित करता है (संबंधित इनबाउंड सिग्नेचर पैकेज)।
अनुबंध
- हर HTTP प्रयास में एक स्थिर डिलीवरी आईडी, बढ़ता हुआ प्रयास संख्या, कुंजी आईडी, टाइमस्टैम्प, और सटीक बॉडी बाइट्स पर HMAC होता है।
- कॉलबैक URL में कोई साइनिंग सीक्रेट, टोकन, या टेनेंट क्रेडेंशियल नहीं होता; क्रेडेंशियल हेडर या सब्सक्रिप्शन रिकॉर्ड में रहते हैं।
- पुनः प्रयास योग्य पार्टनर स्थिति अनुसूची प्रोफ़ाइल का पालन करती हैं; गैर-पुनः प्रयास योग्य क्लाइंट स्थिति बिना आगे प्रयास के समाप्त हो जाती है।
- प्रोफ़ाइल अधिकतम प्रयास के बाद, स्थिति मृत-पत्र और टर्मिनल-फेल्ड हो जाती है; ऑपरेटर रिप्ले एक नई डिलीवरी आईडी आवंटित करता है।
- रिप्ले विंडो के बाहर का टाइमस्टैम्प उसी डिलीवरी के लिए नई पहचान के रूप में नहीं भेजा जाता; वर्कर पुनः प्रयास पर वर्तमान टाइमस्टैम्प साइन करता है या प्रयास को समाप्त चिह्नित करता है।
- डुप्लिकेट वर्कर वेक उसी डिलीवरी आईडी का पुन: उपयोग करते हैं और दूसरी इन-फ्लाइट फैमिली नहीं बनाते।
कार्यान्वयन मार्गदर्शन
- आउटबॉक्स के माध्यम से प्रकाशित करें ताकि वर्कर क्रैश हो सके और फिर से शुरू कर सके। साइन करने से पहले बॉडी को एक बार कैनोनिकलाइज़ करें; साइन और भेजने के बीच कभी पुनः सीरियलाइज़ न करें।
- कुंजी रोटेट करें नए कुंजी आईडी का विज्ञापन करके जबकि पिछली कुंजी इन-फ्लाइट पुनः प्रयासों के लिए मान्य रहती है।
विफलता हैंडलिंग और सुरक्षा उपाय
- ट्रांसपोर्ट टाइमआउट पुनः प्रयास योग्य होते हैं और एक प्रयास खर्च करते हैं। सब्सक्रिप्शन अलाउलिस्ट में न होने वाले होस्ट पर रीडायरेक्ट टर्मिनल-फेल्ड होते हैं।
- साइनिंग सामग्री की कमी प्रयास को ऑपरेटर दोष के रूप में विफल करती है बिना बिना साइन किए बॉडी भेजे।
सत्यापन और संचालन
- सत्यापित करें कि साइन किए गए बाइट्स वायर पर बॉडी के बराबर हैं और URL क्वेरी में कोई गुप्त जानकारी नहीं है। भेजने से पहले वर्कर को कैओस करें और साबित करें कि एक डिलीवरी आईडी के दो प्रयास हैं।
इस पैकेज में निष्पादन-समान उदाहरण फिक्स्चर और स्वीकृति अनुबंध हैं। पैकेज संरचना और मेटाडेटा जांचने के लिए संग्रह रूट से python tools/validate.py चलाएं; फिर लक्षित रिपॉजिटरी में परिदृश्यों को लागू और निष्पादित करें।
अपनाने की धारणाएँ
example.yamlमें नाम और संख्यात्मक मान एक अपनाने वाली प्रोफ़ाइल हैं, सार्वभौमिक डिफ़ॉल्ट नहीं।- अपनाने वाली टीम को अपने सिस्टम के लिए अभिनेता, डेटा वर्ग, त्रुटि शब्दावली, और स्वामित्व को मैप करना होगा।