Canali privati
Un canale il cui nome inizia con private- richiede l'autorizzazione dal tuo backend oltre alla chiave pubblica dell'app. Il tuo backend approva il chiamante per quel canale e restituisce una firma calcolata con il segreto dell'app.
Usa i canali privati per dati con ambito specifico, come gli aggiornamenti degli ordini di un cliente, la dashboard di un tenant o le notifiche di una singola persona.
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
authEndpoint: "/bird/auth",
});
const orders = bird.subscribe("private-orders-4821");
orders.bind("order-updated", (data) => {
console.log(data);
});let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
authEndpoint: URL(string: "https://your-backend.example.com/bird/auth")
))
let orders = bird.subscribe("private-orders-4821")
orders.bind("order-updated") { data in
print(data ?? "")
}val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
authEndpoint = "https://your-backend.example.com/bird/auth",
)
)
val orders = bird.subscribe("private-orders-4821")
orders.bind("order-updated") { data ->
println(data)
}Swift e Kotlin richiedono un URL di autorizzazione assoluto, mentre un client browser può usare un percorso same-origin. Aggiungi il token di sessione del tuo API tramite authHeaders. Il client include questi header in ogni richiesta di autorizzazione, comprese le richieste dopo una riconnessione.
Il client invia in POST l'ID di connessione e il nome del canale a authEndpoint. La sottoscrizione si completa solo dopo che l'endpoint approva il chiamante e restituisce una firma valida. Autorizzazione dei canali definisce la richiesta, la risposta e la stringa da firmare.
Denominare i canali per utente o per tenant
Inserisci l'ambito della risorsa nel nome del canale e verificalo nel tuo endpoint. Un client può richiedere qualsiasi nome di canale, quindi il tuo backend deve impedire sottoscrizioni tra clienti diversi:
if (channel_name !== `private-orders-${user.accountId}`) {
return res.sendStatus(403);
}if channel_name != f"private-orders-{user.account_id}":
return Response(status=403)if channelName != "private-orders-"+user.AccountID {
http.Error(w, "forbidden", http.StatusForbidden)
return
}if ($channelName !== "private-orders-{$user->accountId}") {
http_response_code(403);
return;
}Questo confronto è la decisione di autorizzazione. Non fare mai affidamento su nomi di canale non indovinabili per il controllo degli accessi.
Cosa supportano i canali privati
- Eventi client. Quando l'app ha gli eventi client abilitati, un client sottoscritto può inviare eventi client- agli altri client sul canale senza un round trip attraverso il tuo server. L'edge li rifiuta sui canali pubblici.
- Conteggio connessioni. Con le impostazioni di conteggio connessioni e eventi di conteggio connessioni dell'app abilitate, il client riceve bird:connection_count per il canale.
- Pubblicazione dal server. La pubblicazione dal tuo server funziona esattamente come per un canale pubblico: specifica il canale nell'array channels. Nessuna autorizzazione si applica al tuo server, che possiede già il segreto dell'app.
I canali privati non hanno identità dei membri né eventi relativi ai membri. Se hai bisogno di sapere chi è presente, usa un canale di presenza.
Quando una sottoscrizione viene rifiutata
Una sottoscrizione rifiutata arriva come bird:subscription_error. Le cause più comuni includono una risposta non 2xx dal tuo endpoint o una firma che non corrisponde alla richiesta. Consulta Autorizzazione dei canali per la risoluzione dei problemi.
Prossimi passi
- Autorizzazione dei canali è il contratto che il tuo backend implementa.
- Canali di presenza aggiungono l'identità dei membri sulla stessa autorizzazione.
- Esclusione dei destinatari degli eventi impedisce a un client di ricevere l'evento che ha causato.
Risorse correlate
Continua con la documentazione, le guide e gli esempi per questo argomento.