Mewajibkan koneksi terotorisasi
App key bersifat publik. Siapa pun yang dapat memuat halaman Anda dapat menggunakannya untuk membuka koneksi dan berlangganan ke channel publik.
Koneksi terotorisasi mewajibkan setiap koneksi baru membuktikan bahwa koneksi tersebut terotorisasi dalam 30 detik. Edge Realtime menutup koneksi yang tidak terotorisasi tepat waktu.
Wajibkan koneksi terotorisasi
Aktifkan Authorized connections untuk aplikasi di halaman Realtime apps. Anda juga dapat mengatur authorized_connections ke true melalui API Realtime. Pengaturan ini berlaku untuk setiap koneksi yang menggunakan salah satu key aplikasi.
Perbarui klien agar melakukan otorisasi sebelum Anda mengaktifkan pengaturan ini di production. Koneksi yang sudah terbuka sebelum Anda mengaktifkannya tetap terbuka, tetapi koneksi berikutnya dari klien lama gagal setelah batas waktu otorisasi.
Apa yang dianggap terotorisasi
Koneksi baru dimulai dalam keadaan tidak terotorisasi. Salah satu dari tindakan berikut mengotorisasinya:
- Langganan private atau presence berhasil. Klien mengirim ID koneksi ke authEndpoint Anda, backend Anda menandatanganinya, dan edge memverifikasi tanda tangannya. Lihat Mengotorisasi channel.
- signin() berhasil. Klien mengirim ID koneksi ke memberAuthEndpoint Anda dan menerima identitas member yang ditandatangani. Lihat Mengakhiri koneksi member untuk alur sign-in lengkap.
Kedua jalur membuktikan hal yang sama: sesuatu yang memegang app secret menjamin koneksi ini. Berlangganan ke channel publik tidak membuktikan apa pun dan tidak mengotorisasi apa pun.
Kasus khusus channel publik saja
Klien yang hanya berlangganan ke channel publik biasanya tidak menghubungi backend Anda. Setelah Anda mewajibkan koneksi terotorisasi, panggil signin() agar koneksi dapat terotorisasi tanpa langganan private:
import { BirdRealtime } from "@messagebird/realtime";
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: "/bird/auth/member",
});
await bird.signin();
const status = bird.subscribe("build-status");
status.bind("build-finished", (data) => render(data));import BirdRealtime
let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: URL(string: "https://your-backend.example.com/bird/auth/member")
))
try await bird.signin()
let status = bird.subscribe("build-status")
status.bind("build-finished") { data in
render(data)
}import com.bird.realtime.BirdRealtime
import com.bird.realtime.BirdRealtimeOptions
val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
memberAuthEndpoint = "https://your-backend.example.com/bird/auth/member",
)
)
bird.signin() // suspending
val status = bird.subscribe("build-status")
status.bind("build-finished") { data ->
render(data)
}Panggil signin() sekali. Klien melakukan sign-in ulang setelah setiap reconnect karena identitas terikat pada koneksi. Kembalikan 403 Forbidden dari endpoint otorisasi member Anda jika pemanggil tidak boleh terhubung.
Jika aplikasi berlangganan ke channel private atau presence saat dimuat, langganan yang berhasil sudah mengotorisasi koneksi tersebut.
Apa yang dilihat klien jika tidak terotorisasi
Edge menutup koneksi dengan kode 4009 dan alasan Connection not authorized within timeout. Klien tidak mencoba ulang kode dalam rentang ini, sehingga koneksi memasuki status failed.
bird.connection.bind("error", ({ code, message }) => {
if (code === 4009) console.warn(message);
});bird.onError { error in
if error.code == 4009 { print(error.message) }
}bird.onError { error ->
if (error.code == 4009) println(error.message)
}Kode 4009 juga mengidentifikasi member yang koneksinya diakhiri oleh backend Anda. Periksa alasannya sebelum memilih status login atau signed-out. Lihat Mengakhiri koneksi member dan Siklus hidup koneksi dan reconnection.
Koneksi tidak dihitung dalam kuota koneksi aplikasi sampai koneksi tersebut terotorisasi.
Cakupan otorisasi
Mewajibkan koneksi terotorisasi mengontrol siapa yang dapat menahan koneksi tetap terbuka. Ini tidak menggantikan pemeriksaan otorisasi atau mengubah siapa yang dapat membaca channel:
- Channel publik tetap publik untuk setiap koneksi terotorisasi. Jika event milik satu pelanggan, gunakan channel private dan periksa nama channel di endpoint Anda.
- Siapa pun yang ditandatangani oleh endpoint auth Anda dianggap terotorisasi, sehingga endpoint yang permisif memberikan otorisasi sebebas app key.
Langkah selanjutnya
- Mengotorisasi channel adalah tanda tangan yang dihitung backend Anda untuk langganan private dan presence.
- Channel private adalah alat yang tepat jika event itu sendiri milik seseorang.
- Mengakhiri koneksi member membahas signin() dan penggunaan lain dari 4009.
- Mengirim event ke member mengarahkan event ke identitas yang sudah sign-in, bukan ke channel.
- Siklus hidup koneksi dan reconnection menjelaskan mengapa 4009 bersifat terminal.
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.
Jelajahi kemampuannyaRealtimeIkuti jalur pembelajaranBuild your first integrationPanduan implementasiSend your first realtime event
Coba praktiknya dan dapatkan ringkasan implementasi