Aturan sesi Anda menentukan siapa yang boleh berlangganan.
Tidak ada model izin yang perlu dikonfigurasi di Bird. Langganan private atau presence disetujui oleh endpoint yang Anda tulis, menggunakan sesi yang sudah Anda miliki, dan ditandatangani dengan kunci rahasia yang hanya dipegang server Anda. Bird memverifikasi tanda tangan; Anda yang menentukan kebijakannya.
// 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 },
}),
}),
);
});
Satu kunci bersifat publik. Satu lagi tidak.
Semuanya mengikuti pemisahan itu.
Setiap aplikasi di Bird Realtime API memiliki key dan secret. Key dirancang untuk disertakan dalam kode klien; secret mengautentikasi panggilan server Anda dan menandatangani langganan, dan hanya ditampilkan sekali saat pembuatan. Siapa pun yang memilikinya dapat mempublikasikan ke aplikasi Anda dan memalsukan identitas presence, jadi perlakukan seperti kata sandi database. Rotasi bersifat aditif, bukan disruptif: buat key kedua, deploy, lalu cabut yang lama.
Empat kontrol, empat pertanyaan
Siapa yang boleh berlangganan, siapa yang boleh mempertahankan koneksi, siapa yang bisa membaca payload, dan siapa yang masih diizinkan masuk.
- 01
Langganan bertanda tangan.
Klien mengirimkan connection id dan nama channel ke endpoint Anda. Anda memeriksa pemanggil, tolak dengan 403 jika mereka tidak boleh bergabung, atau kembalikan tanda tangan HMAC-SHA256 atas connection id dan nama channel, diawali dengan app key. Karena connection id ada di dalam tanda tangan, persetujuan mencakup satu koneksi dan tidak bisa di-replay ke koneksi lain. Channel presence juga menandatangani identitas anggota, dan harus berupa string persis yang Anda kembalikan: serialisasi ulang objek yang sama dapat mengubah urutan key dan membatalkan tanda tangan.
- 02
Koneksi terotorisasi.
App key bersifat publik, jadi siapa pun yang bisa memuat halaman Anda dapat membuka socket dengannya. Aktifkan koneksi terotorisasi dan setiap koneksi baru punya 30 detik untuk membuktikan bahwa pemegang secret telah menjaminnya, melalui langganan private atau sign-in. Koneksi yang tidak terverifikasi ditutup dengan kode 4009, dan koneksi tanpa otorisasi tidak pernah dihitung terhadap kuota Anda. Berlangganan ke channel publik tidak membuktikan apa pun dan tidak mengotorisasi koneksi.
- 03
Enkripsi end-to-end.
Channel private-encrypted- disegel oleh server Anda sebelum permintaan meninggalkan proses Anda, dengan master key 32-byte yang tidak pernah muncul dalam permintaan Realtime API. Setiap channel menurunkan key-nya sendiri, sehingga mengotorisasi klien untuk satu channel terenkripsi tidak membuatnya bisa membaca channel lain. Bird tidak dapat memulihkan key yang hilang, dan rotasi melindungi payload masa depan, bukan yang lalu.
- 04
Mencabut akses sekarang.
Pengguna yang sign-out, kata sandi yang diubah, akun yang diblokir: putuskan koneksi anggota tersebut dan setiap koneksi yang dipegang identitas itu akan ditutup, di semua perangkat. Klien memperlakukan pemutusan itu sebagai terminal tanpa mencoba lagi, dan endpoint Anda berhenti menandatangani untuk mereka, sehingga mereka tidak bisa kembali.
Channel terenkripsi
Payload yang tidak bisa dibaca Bird, di infrastruktur yang dijalankan Bird.
SDK server mengenali prefix channel, menurunkan key channel tersebut dari master key Anda, dan menyegel payload secara lokal. Edge meneruskan ciphertext dan endpoint otorisasi Anda menyerahkan derived key hanya kepada klien yang disetujui. Dua batasan yang perlu dipertimbangkan: nama channel dan event dikirim tanpa enkripsi, jadi pilih nama yang tidak membocorkan apa yang Anda lindungi, dan enkripsi tidak dapat dikombinasikan dengan presence atau client event. Caching tetap bisa: channel private-encrypted-cache- menyimpan cached event dalam keadaan tersegel.
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" },
});
Apa yang tidak dilakukan otorisasi.
Mewajibkan koneksi terotorisasi mengontrol siapa yang boleh mempertahankan socket terbuka. Ini tidak mengubah siapa yang bisa membaca channel: channel publik tetap bisa dibaca oleh setiap koneksi terotorisasi, jadi event milik satu pelanggan harus ditempatkan di channel private yang namanya diperiksa oleh endpoint Anda. Dan karena endpoint Anda adalah otoritas, endpoint yang permisif memberikan akses sebebas key yang bocor. Hal yang sama berlaku untuk client event, yang tidak divalidasi oleh edge: gunakan untuk sinyal, dan rutekan semua yang bersifat otoritatif melalui server Anda.
Di mana data disimpan.
Sebuah aplikasi memilih region-nya saat Anda membuatnya dan mempertahankannya seumur hidup, jadi pilih yang paling dekat dengan pengguna Anda, dan region aplikasi bisa berbeda dari region utama workspace Anda. Aplikasi juga merupakan batas isolasi: dua aplikasi tidak pernah melihat channel satu sama lain, itulah mengapa satu aplikasi per environment adalah cara yang tepat untuk memisahkan traffic staging dari production.
Pelajari lebih lanjut di dokumentasi.
Mengotorisasi channel membahas kontrak request dan response serta string persis yang harus ditandatangani. Mewajibkan koneksi terotorisasi membahas jendela 30 detik dan kode 4009, channel terenkripsi membahas pembuatan dan rotasi key, dan memutuskan koneksi anggota membahas alur sign-in dan disconnect.
Realtime lainnya
Satu aplikasi, satu pasangan key. Jelajahi kemampuan lainnya.
Skalakan tanpa
kehilangan kendali.
Atur tim dalam workspace, kontrol akses API, dan lacak perubahan melalui log audit.
Log audit
Produksi- Workspace
- Produksi
- Sumber daya
- Agen pengiriman
- Akses bacaBaca & tulis