Privékanalen
Een kanaal waarvan de naam begint met private- vereist autorisatie van je backend naast de publieke app-sleutel. Je backend keurt de aanroeper goed voor dat kanaal en geeft een handtekening terug die met het app-geheim is berekend.
Gebruik privékanalen voor afgebakende data zoals orderupdates van een klant, het dashboard van een tenant of notificaties van één persoon.
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 en Kotlin vereisen een absolute autorisatie-URL, terwijl een browserclient een same-origin-pad kan gebruiken. Voeg het sessietoken van je API toe via authHeaders. De client stuurt deze headers mee bij elk autorisatieverzoek, ook bij verzoeken na een herverbinding.
De client post de verbindings-ID en kanaalnaam naar authEndpoint. Het abonnement wordt pas voltooid nadat het endpoint de aanroeper heeft goedgekeurd en een geldige handtekening retourneert. Kanalen autoriseren definieert het verzoek, het antwoord en de te ondertekenen string.
Kanalen benoemen per gebruiker of per tenant
Zet het resourcebereik in de kanaalnaam en verifieer het in je endpoint. Een client kan elke kanaalnaam aanvragen, dus je backend moet cross-klantabonnementen voorkomen:
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;
}Deze vergelijking is de autorisatiebeslissing. Vertrouw nooit op moeilijk te raden kanaalnamen voor toegangscontrole.
Wat privékanalen ondersteunen
- Client-events. Als de app client-events heeft ingeschakeld, kan een geabonneerde client client--events naar de andere clients op het kanaal sturen zonder een round trip via je server. De edge weigert deze op publieke kanalen.
- Verbindingen tellen. Met de instellingen voor het tellen van verbindingen en verbindingsaantal-events van de app ingeschakeld, ontvangt de client bird:connection_count voor het kanaal.
- Server-publishing. Publiceren vanaf je server werkt precies zoals bij een publiek kanaal: geef het kanaal op in de channels-array. Er is geen autorisatie van toepassing op je server, die al over het app-geheim beschikt.
Privékanalen hebben geen ledenidentiteit en geen ledenevents. Als je wilt weten wie er aanwezig is, gebruik dan een presence-kanaal.
Wanneer een abonnement wordt geweigerd
Een geweigerd abonnement komt binnen als bird:subscription_error. Veelvoorkomende oorzaken zijn een niet-2xx-antwoord van je endpoint of een handtekening die niet overeenkomt met het verzoek. Zie Kanalen autoriseren voor probleemoplossing.
Volgende stappen
- Kanalen autoriseren is het contract dat je backend implementeert.
- Presence-kanalen voegen ledenidentiteit toe bovenop dezelfde autorisatie.
- Eventontvangers uitsluiten voorkomt dat een client het event ontvangt dat hij zelf heeft veroorzaakt.
Gerelateerde bronnen
Ga verder met de documentatie, handleidingen en voorbeelden voor dit onderwerp.