Private Channels
Ein Channel, dessen Name mit private- beginnt, erfordert neben dem öffentlichen App-Key eine Autorisierung durch Ihr Backend. Ihr Backend genehmigt den Aufrufer für diesen Channel und gibt eine Signatur zurück, die mit dem App-Secret berechnet wurde.
Verwenden Sie Private Channels für kontextbezogene Daten wie Bestellaktualisierungen eines Kunden, das Dashboard eines Mandanten oder Benachrichtigungen einer einzelnen Person.
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 und Kotlin erfordern eine absolute Autorisierungs-URL, während ein Browser-Client einen Same-Origin-Pfad verwenden kann. Fügen Sie das Session-Token Ihres API über authHeaders hinzu. Der Client sendet diese Header bei jeder Autorisierungsanfrage mit, auch bei Anfragen nach einem Reconnect.
Der Client sendet die Connection-ID und den Channel-Namen per POST an authEndpoint. Die Subscription wird erst abgeschlossen, wenn der Endpoint den Aufrufer genehmigt und eine gültige Signatur zurückgibt. Channels autorisieren definiert die Anfrage, die Antwort und den zu signierenden String.
Channels pro Benutzer oder pro Mandant benennen
Setzen Sie den Ressourcen-Scope in den Channel-Namen und prüfen Sie ihn in Ihrem Endpoint. Ein Client kann jeden beliebigen Channel-Namen anfordern, daher muss Ihr Backend kundenübergreifende Subscriptions verhindern:
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;
}Dieser Vergleich ist die Autorisierungsentscheidung. Verlassen Sie sich niemals auf schwer erratbare Channel-Namen zur Zugriffskontrolle.
Was Private Channels unterstützen
- Client-Events. Wenn in der App Client-Events aktiviert sind, kann ein abonnierter Client client--Events an die anderen Clients auf dem Channel senden, ohne einen Umweg über Ihren Server. Die Edge lehnt diese auf öffentlichen Channels ab.
- Verbindungszählung. Wenn die Einstellungen für Verbindungszählung und Verbindungsanzahl-Events der App aktiviert sind, empfängt der Client bird:connection_count für den Channel.
- Server-Publishing. Das Veröffentlichen von Ihrem Server funktioniert genauso wie bei einem öffentlichen Channel: Geben Sie den Channel im channels-Array an. Für Ihren Server gilt keine Autorisierung, da er bereits das App-Secret besitzt.
Private Channels haben keine Mitgliederidentität und keine Mitglieder-Events. Wenn Sie wissen müssen, wer anwesend ist, verwenden Sie einen Presence Channel.
Wenn eine Subscription abgelehnt wird
Eine abgelehnte Subscription wird als bird:subscription_error empfangen. Häufige Ursachen sind eine Nicht-2xx-Antwort von Ihrem Endpoint oder eine Signatur, die nicht zur Anfrage passt. Siehe Channels autorisieren zur Fehlerbehebung.
Nächste Schritte
- Channels autorisieren beschreibt den Vertrag, den Ihr Backend implementiert.
- Presence Channels ergänzen die gleiche Autorisierung um eine Mitgliederidentität.
- Event-Empfänger ausschließen verhindert, dass ein Client das Event empfängt, das er selbst ausgelöst hat.
Verwandte Ressourcen
Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema. Die Ressourcen sind auf Englisch.
Die Funktion erkundenRealtimeDem Lernpfad folgenBuild your first integrationImplementierungsleitfadenSend your first realtime event
Übung ausprobieren und ein Implementierungs-Briefing erhalten