Realtime सुरक्षा

आपके सेशन नियम तय करते हैं कौन सब्सक्राइब कर सकता है।

Bird में कॉन्फ़िगर करने के लिए कोई परमिशन मॉडल नहीं है। प्राइवेट या प्रेज़ेंस सब्सक्रिप्शन को आपके लिखे एंडपॉइंट द्वारा, आपके मौजूदा सेशन का उपयोग करके, और केवल आपके सर्वर के पास मौजूद सीक्रेट से हस्ताक्षरित करके स्वीकृत किया जाता है। Bird हस्ताक्षर सत्यापित करता है; नीति आप तय करते हैं।

auth.ts
200 · signed
// Your endpoint. The only place the app secret lives.
app.post("/bird/auth", async (req, res) => {
  const { connection_id, channel_name } = req.body;
  const user = await session(req);

  if (!mayJoin(user, channel_name)) return res.sendStatus(403);

  // Signs <connection_id>:<channel_name>[:<member_data>] with the app
  // secret, and adds shared_secret on an encrypted channel.
  res.json(
    await bird.realtime.authorizeChannel({
      connectionId: connection_id,
      channelName: channel_name,
      memberData: JSON.stringify({
        member_id: user.id,
        member_info: { name: user.name },
      }),
    }),
  );
});

एक कुंजी पब्लिक है। एक नहीं।

सब कुछ इसी विभाजन से तय होता है।

Bird Realtime API पर हर ऐप के पास एक कुंजी और एक सीक्रेट होता है। कुंजी क्लाइंट कोड में भेजने के लिए है; सीक्रेट आपके सर्वर की कॉल को प्रमाणित करता है और सब्सक्रिप्शन पर हस्ताक्षर करता है, और यह बनाते समय केवल एक बार दिखाया जाता है। जिसके पास भी यह हो, वह आपके ऐप पर पब्लिश कर सकता है और प्रेज़ेंस पहचान जाली बना सकता है, इसलिए इसे डेटाबेस पासवर्ड की तरह रखें। रोटेशन विघटनकारी नहीं बल्कि संचयी है: एक दूसरी कुंजी बनाएँ, उसे डिप्लॉय करें, फिर पुरानी को रिवोक करें।

चार नियंत्रण, चार सवाल

कौन सब्सक्राइब कर सकता है, कौन कनेक्शन बनाए रख सकता है, कौन पेलोड पढ़ सकता है, और किसे अभी भी अनुमति है।

  1. 01

    हस्ताक्षरित सब्सक्रिप्शन।

    क्लाइंट अपना कनेक्शन id और चैनल नाम आपके एंडपॉइंट पर पोस्ट करता है। आप कॉलर की जाँच करें, अगर उसे जॉइन करने की अनुमति नहीं है तो 403 लौटाएँ, या कनेक्शन id और चैनल नाम पर HMAC-SHA256 हस्ताक्षर लौटाएँ, जिसमें ऐप कुंजी प्रीफ़िक्स हो। चूँकि कनेक्शन id हस्ताक्षर में है, एक अनुमोदन एक कनेक्शन के लिए है और दूसरे पर रीप्ले नहीं किया जा सकता। प्रेज़ेंस चैनल सदस्य पहचान पर भी हस्ताक्षर करता है, और यह ठीक वही स्ट्रिंग होनी चाहिए जो आप लौटाते हैं: उसी ऑब्जेक्ट को री-सीरियलाइज़ करने से कुंजियों का क्रम बदल सकता है और हस्ताक्षर अमान्य हो सकता है।

  2. 02

    ऑथराइज़्ड कनेक्शन।

    ऐप कुंजी पब्लिक है, इसलिए जो भी आपका पेज लोड कर सकता है वह इससे सॉकेट खोल सकता है। ऑथराइज़्ड कनेक्शन चालू करें और हर नए कनेक्शन को 30 सेकंड के भीतर यह साबित करना होगा कि सीक्रेट रखने वाले ने इसकी पुष्टि की है, किसी प्राइवेट सब्सक्रिप्शन या साइन-इन के ज़रिए। जो ऐसा नहीं करता उसे कोड 4009 से बंद कर दिया जाता है, और अनऑथराइज़्ड कनेक्शन आपके कोटे में कभी नहीं गिने जाते। पब्लिक चैनल को सब्सक्राइब करना कुछ साबित नहीं करता और कनेक्शन को ऑथराइज़ नहीं करता।

  3. 03

    एंड-टू-एंड एन्क्रिप्शन।

    एक private-encrypted- चैनल आपके सर्वर द्वारा रिक्वेस्ट आपकी प्रोसेस से बाहर जाने से पहले सील किया जाता है, एक 32-बाइट मास्टर कुंजी से जो कभी किसी Realtime API रिक्वेस्ट में नहीं दिखती। हर चैनल अपनी कुंजी प्राप्त करता है, इसलिए किसी क्लाइंट को एक एन्क्रिप्टेड चैनल के लिए ऑथराइज़ करना उसे दूसरा पढ़ने की अनुमति नहीं देता। Bird खोई हुई कुंजी पुनर्प्राप्त नहीं कर सकता, और रोटेशन भविष्य के पेलोड की सुरक्षा करता है, पिछले की नहीं।

  4. 04

    अभी एक्सेस रिवोक करना।

    साइन-आउट हुआ उपयोगकर्ता, बदला हुआ पासवर्ड, प्रतिबंधित अकाउंट: सदस्य को डिस्कनेक्ट करें और उस पहचान के हर कनेक्शन को हर डिवाइस पर बंद कर दिया जाता है। क्लाइंट उस बंद को फिर से प्रयास करने की बजाय अंतिम मानते हैं, और आपके एंडपॉइंट उनके लिए हस्ताक्षर करना बंद कर देते हैं, इसलिए वे वापस नहीं आ सकते।

एन्क्रिप्टेड चैनल

ऐसे पेलोड जो Bird नहीं पढ़ सकता, उस इन्फ्रास्ट्रक्चर पर जो Bird चलाता है।

सर्वर SDK चैनल प्रीफ़िक्स पहचानता है, आपकी मास्टर कुंजी से उस चैनल की कुंजी प्राप्त करता है, और पेलोड को स्थानीय रूप से सील करता है। एज सिफ़रटेक्स्ट फ़ॉरवर्ड करता है और आपका ऑथराइज़ेशन एंडपॉइंट केवल स्वीकृत क्लाइंट को व्युत्पन्न कुंजी देता है। दो सीमाएँ ध्यान में रखें: चैनल और इवेंट नाम स्पष्ट पाठ में जाते हैं, इसलिए ऐसे नाम चुनें जो आप जो सुरक्षित कर रहे हैं उसे लीक न करें, और एन्क्रिप्शन को प्रेज़ेंस या क्लाइंट इवेंट के साथ नहीं जोड़ा जा सकता। कैशिंग संभव है: एक private-encrypted-cache- चैनल अपने कैश्ड इवेंट को सील करके स्टोर करता है।

encrypted.ts
sealed locally
const bird = new BirdClient({
  apiKey: process.env.BIRD_API_KEY!,
  realtime: {
    key: process.env.BIRD_REALTIME_KEY,
    secret: process.env.BIRD_REALTIME_SECRET,
    // 32 random bytes, yours alone. Never sent to Bird.
    encryptionMasterKey: process.env.BIRD_REALTIME_MASTER_KEY,
  },
});

// Sealed in your process. The edge forwards ciphertext.
await bird.realtime.publish(APP_ID, {
  event: "order.updated",
  channels: ["private-encrypted-orders"],
  data: { order_id: "ord_123", status: "shipped" },
});

ऑथराइज़ेशन क्या नहीं करता।

ऑथराइज़्ड कनेक्शन अनिवार्य करने से यह नियंत्रित होता है कि कौन सॉकेट खुला रख सकता है। इससे यह नहीं बदलता कि कौन चैनल पढ़ सकता है: पब्लिक चैनल हर ऑथराइज़्ड कनेक्शन के लिए पठनीय रहता है, इसलिए जो इवेंट एक ग्राहक के हैं वे एक प्राइवेट चैनल पर होने चाहिए जिसका नाम आपका एंडपॉइंट जाँचता है। और चूँकि आपके एंडपॉइंट ही प्राधिकारी हैं, एक ढीला एंडपॉइंट उतनी ही आज़ादी से एक्सेस देता है जितना एक लीक हुई कुंजी। यही बात क्लाइंट इवेंट पर लागू होती है, जिन्हें एज सत्यापित नहीं करता: इन्हें सिग्नल के लिए उपयोग करें, और कोई भी प्रामाणिक चीज़ अपने सर्वर से भेजें।

डेटा कहाँ रहता है।

ऐप बनाते समय आप उसका रीजन चुनते हैं और यह स्थायी रहता है, इसलिए अपने उपयोगकर्ताओं के सबसे करीब वाला चुनें, और ऐप का रीजन आपके वर्कस्पेस के होम रीजन से भिन्न हो सकता है। ऐप आइसोलेशन की सीमा भी हैं: दो ऐप कभी एक-दूसरे के चैनल नहीं देखते, इसीलिए प्रति एनवायरनमेंट एक ऐप स्टेजिंग ट्रैफ़िक को प्रोडक्शन से बाहर रखने का सही तरीका है।

डॉक्स में गहराई से जानें।

चैनल ऑथराइज़ करना में रिक्वेस्ट और रिस्पॉन्स कॉन्ट्रैक्ट और हस्ताक्षर के लिए सटीक स्ट्रिंग दी गई है। ऑथराइज़्ड कनेक्शन अनिवार्य करना में 30-सेकंड विंडो और कोड 4009 शामिल है, एन्क्रिप्टेड चैनल में कुंजी जनरेशन और रोटेशन शामिल है, और सदस्य कनेक्शन समाप्त करना साइन-इन और डिस्कनेक्ट फ़्लो है।

व्यवहार में लाएँ।

इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।

अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ

Key भेजें। Secret सुरक्षित रखें।

साइन किए गए सब्सक्रिप्शन, अधिकृत कनेक्शन और एन्क्रिप्टेड चैनल — हर Realtime ऐप में, हर प्लान पर।

एक चैनल से शुरुआत करें।
तैयार होने पर बाकी जोड़ें।

एक test API key तुरंत आपकी है। जब आप payment method जोड़ते हैं और sender verify करते हैं, तब production अनलॉक हो जाता है।

Claude Code, Cursor या Codex इस्तेमाल कर रहे हैं? एक setup prompt कॉपी करें और आपका agent आपके लिए Bird CLI और skills इंस्टॉल कर देगा। अपना चुनें:

Cursor