आपके रिसीवर्स अलग-अलग समय पर डिप्लॉय कर सकते हैं। ओवरलैप से पुराना secret इस्तेमाल करने वाला रिसीवर और नया secret इस्तेमाल करने वाला रिसीवर दोनों एक ही डिलीवरी को प्रमाणित कर सकते हैं।
डिप्लॉयमेंट के दौरान डिलीवरी सत्यापित करते रहें ताकि किसी हमलावर का अनुरोध काम ट्रिगर न कर सके।
रोटेट करने पर क्या होता है?
Bird आपको एक नया signing secret देता है। इसे 24 घंटे के भीतर डिप्लॉय करें, जब तक Bird अभी भी पुराने secret के साथ साइन कर रहा हो।
अपने endpoint के लिए rotateWebhookSecret कॉल करें। इसका secret सेव करें, जो whsec_ से शुरू होने वाली एक non-empty स्ट्रिंग है, क्योंकि यह केवल उसी रिस्पॉन्स में लौटाया जाता है।
Bird ओवरलैप के दौरान प्रत्येक डिलीवरी को दोनों secrets के साथ साइन करता है। webhook-signature हेडर में स्पेस-सेपरेटेड signatures होते हैं, जिनमें से प्रत्येक v1, से शुरू होता है।
रिसीवर संबंधित secret का उपयोग करके किसी भी signature को सत्यापित कर सकता है। डिप्लॉयमेंट 24 घंटे के भीतर पूरा करें क्योंकि उस विंडो के बाद पुराना secret साइन करना बंद कर देता है।
मेरे हैंडलर को क्या करना होगा?
आपके हैंडलर को डिलीवरी तब स्वीकार करनी चाहिए जब कोई भी दिया गया signature उसके भरोसेमंद secret से मैच करे।
जो रिसीवर केवल पहला signature जाँचता है, वह secrets बदलने के बाद वैध डिलीवरी को रिजेक्ट कर सकता है।
Standard Webhooks specification signatures की एक सूची परिभाषित करता है ताकि रिसीवर्स रोटेशन के दौरान प्रत्येक को आज़मा सकें। लाइव endpoint को रोटेट करने से पहले अपने verifier को मल्टीपल signatures के साथ टेस्ट करें।
बदलाव के दौरान timestamp और डुप्लिकेट जाँच बनाए रखें। Signature सत्यापन उन जाँचों को कवर करता है।
सुरक्षित क्रम क्या है?
नया secret सेव और डिप्लॉय करें। पुराने secret का ओवरलैप समाप्त होने से पहले सत्यापन की पुष्टि करें।
- Endpoint secret रोटेट करें और लौटाया गया मान तुरंत स्टोर करें।
- 24 घंटे के ओवरलैप के भीतर नया मान हर रिसीवर इंस्टेंस पर डिप्लॉय करें।
- रिसीवर लॉग और Bird के डिलीवरी प्रयासों के माध्यम से पुष्टि करें कि रिसीवर्स नए secret से डिलीवरी सत्यापित कर रहे हैं।
- ओवरलैप के बाद पिछले secret को स्वचालित रूप से समाप्त होने दें।
रोटेशन ऑपरेशन में कोई अलग हटाने का चरण नहीं है। यदि पुराना secret उजागर हो गया था, तो नया secret मिलने के बाद अपने रिसीवर्स में पुराने पर भरोसा करना बंद करें। केवल रोटेट करने से ओवरलैप के दौरान पुराने secret पर भरोसा करने वाले रिसीवर्स असुरक्षित रहते हैं।
अगर मैं तुरंत फिर से रोटेट करूँ तो?
Endpoint पर पाँच एक साथ वैध secrets तक एक और रोटेशन सफल हो सकता है।
एक secret से शुरू करने पर, पुराने secrets की समय-सीमा समाप्त होने से पहले चार रोटेशन उन पाँच स्लॉट को भर सकते हैं। अगला रोटेशन WebhookTooManySecrets के साथ विफल होता है। इसलिए एक रोटेशन लूप ज़रूरत के समय नया secret जारी होने से रोक सकता है।
दोबारा रोटेट करने से पहले किसी पुराने secret की समय-सीमा समाप्त होने की प्रतीक्षा करें। बार-बार रोटेशन करने से अपने रिसीवर्स पर नया secret डिप्लॉय करने की आवश्यकता समाप्त नहीं होती।
बदलाव के दौरान विफल हुई डिलीवरी का क्या होता है?
Bird विफल डिलीवरी को फिर से प्रयास करता है, इसलिए सत्यापन ठीक करने से फिर से प्रयास विंडो के दौरान उन्हें रिकवर किया जा सकता है।
शेड्यूल टाइमिंग समायोजन से पहले लगभग 27.5 घंटे तक फैला है। विफल डिलीवरी को फिर से प्रयास समाप्त होने के बाद रीप्ले के माध्यम से भी रिकवर किया जा सकता है; विफल webhook फिर से प्रयास रीप्ले विंडो की व्याख्या करता है।
जिस अनुरोध को आप सत्यापित नहीं कर सकते, उसके लिए एक त्रुटि लौटाएँ। 2xx लौटाने से डिलीवरी सफल चिह्नित हो जाती है, जो उसे missed-event रीप्ले से बाहर कर देता है।
संक्षेप में
ओवरलैप के दौरान डिप्लॉय करें।
Bird 24 घंटे तक पुराने और नए दोनों secrets के साथ साइन करता है, जिससे रिसीवर्स को नया मान अपनाने का समय मिलता है।
कोई भी मैचिंग signature स्वीकार करें।
जो रिसीवर केवल पहला signature जाँचता है, वह रोटेशन के दौरान एक वैध डिलीवरी को रिजेक्ट कर सकता है।
नया secret तुरंत सेव करें।
Rotate रिस्पॉन्स ही एकमात्र जगह है जहाँ नया secret लौटाया जाता है।
रोटेशन की पाँच-secret सीमा है।
एक वैध secret से शुरू करने पर, चार रोटेशन पुराने secrets की समय-सीमा समाप्त होने से पहले उपलब्ध स्लॉट भर देते हैं।