Canaux privés
Un canal dont le nom commence par private- nécessite une autorisation de votre backend en plus de la clé publique de l'application. Votre backend approuve l'appelant pour ce canal et renvoie une signature calculée avec le secret de l'application.
Utilisez les canaux privés pour des données ciblées, comme les mises à jour de commande d'un client, le tableau de bord d'un locataire ou les notifications d'une personne.
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 et Kotlin exigent une URL d'autorisation absolue, tandis qu'un client navigateur peut utiliser un chemin de même origine. Ajoutez le jeton de session de votre API via authHeaders. Le client inclut ces en-têtes dans chaque requête d'autorisation, y compris après une reconnexion.
Le client envoie l'identifiant de connexion et le nom du canal à authEndpoint. La souscription ne s'achève qu'après que le endpoint a approuvé l'appelant et renvoyé une signature valide. Autoriser les canaux définit la requête, la réponse et la chaîne à signer.
Nommer les canaux par utilisateur ou par locataire
Placez la portée de la ressource dans le nom du canal et vérifiez-la dans votre endpoint. Un client peut demander n'importe quel nom de canal, votre backend doit donc empêcher les souscriptions inter-clients :
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;
}Cette comparaison constitue la décision d'autorisation. Ne comptez jamais sur des noms de canaux difficiles à deviner pour le contrôle d'accès.
Ce que les canaux privés prennent en charge
- Événements client. Lorsque l'application a les événements client activés, un client souscrit peut envoyer des événements client- aux autres clients du canal sans aller-retour par votre serveur. Le edge les rejette sur les canaux publics.
- Compteur de connexions. Lorsque les paramètres de comptage de connexions et d'événements de comptage de connexions de l'application sont activés, le client reçoit bird:connection_count pour le canal.
- Publication serveur. La publication depuis votre serveur fonctionne exactement comme pour un canal public : nommez le canal dans le tableau channels. Aucune autorisation ne s'applique à votre serveur, qui détient déjà le secret de l'application.
Les canaux privés n'ont pas d'identité de membre ni d'événements de membre. Si vous avez besoin de savoir qui est présent, utilisez un canal de présence.
Lorsqu'une souscription est refusée
Une souscription refusée arrive sous la forme bird:subscription_error. Les causes courantes incluent une réponse non-2xx de votre endpoint ou une signature qui ne correspond pas à la requête. Consultez Autoriser les canaux pour le dépannage.
Étapes suivantes
- Autoriser les canaux est le contrat que votre backend implémente.
- Canaux de présence ajoutent l'identité de membre en plus de la même autorisation.
- Exclure des destinataires d'événements empêche un client de recevoir l'événement qu'il a provoqué.
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.
Explorer la fonctionnalitéRealtimeSuivre le parcours d'apprentissageBuild your first integrationGuide d'implémentationSend your first realtime event
Essayez la pratique et obtenez un guide d'implémentation