Sign inGet started

Geautoriseerde verbindingen vereisen

De app-sleutel is openbaar. Iedereen die je pagina kan laden, kan hem gebruiken om een verbinding te openen en zich te abonneren op publieke kanalen.
Geautoriseerde verbindingen vereisen dat elke nieuwe verbinding binnen 30 seconden bewijst dat ze geautoriseerd is. De Realtime-edge sluit verbindingen die niet op tijd autoriseren.

Geautoriseerde verbindingen vereisen

Schakel Authorized connections in voor de app op de pagina Realtime apps. Je kunt ook authorized_connections instellen op true via de Realtime API. De instelling geldt voor elke verbinding die een van de sleutels van de app gebruikt.
Werk clients bij zodat ze autoriseren voordat je de instelling in productie inschakelt. Verbindingen die vóór het inschakelen tot stand kwamen, blijven open, maar latere verbindingen van oudere clients mislukken na de autorisatie-timeout.

Wat telt als geautoriseerd

Een nieuwe verbinding begint als ongeautoriseerd. Een van deze acties autoriseert de verbinding:
  • Een privé- of presence-abonnement slaagt. De client stuurt de verbindings-ID naar je authEndpoint, je backend ondertekent deze en de edge verifieert de handtekening. Zie Kanalen autoriseren.
  • signin() slaagt. De client stuurt de verbindings-ID naar je memberAuthEndpoint en ontvangt een ondertekende ledenidentiteit. Zie Ledenverbindingen beëindigen voor de volledige aanmeldflow.
Beide routes bewijzen hetzelfde: iets dat het app-geheim bezit, stond in voor deze verbinding. Abonneren op een publiek kanaal bewijst niets en autoriseert niets.

Het geval met alleen publieke kanalen

Een client die zich alleen abonneert op publieke kanalen maakt normaal geen contact met je backend. Nadat je geautoriseerde verbindingen vereist, roep je signin() aan zodat de verbinding kan autoriseren zonder een privé-abonnement:
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));
Roep signin() eenmaal aan. De client meldt zich na elke herverbinding opnieuw aan, omdat de identiteit bij de verbinding hoort. Retourneer 403 Forbidden vanuit je ledenautorisatie-endpoint wanneer de aanroeper niet mag verbinden.
Als de app zich bij het laden abonneert op een privé- of presence-kanaal, autoriseert het geslaagde abonnement de verbinding al.

Wat de client ziet als deze niet autoriseert

De edge sluit de verbinding met code 4009 en de reden Connection not authorized within timeout. De clients proberen codes in dit bereik niet opnieuw, waardoor de verbinding de failed-status krijgt.
bird.connection.bind("error", ({ code, message }) => {
  if (code === 4009) console.warn(message);
});
Code 4009 identificeert ook een lid waarvan je backend de verbindingen heeft beëindigd. Controleer de reden voordat je kiest voor een ingelogde of uitgelogde status. Zie Ledenverbindingen beëindigen en Verbindingslevenscyclus en herverbinding.
Verbindingen tellen pas mee voor het verbindingsquotum van de app zodra ze autoriseren.

Autorisatiebereik

Het vereisen van geautoriseerde verbindingen bepaalt wie een verbinding open kan houden. Het vervangt geen autorisatiecontroles en verandert niet wie een kanaal kan lezen:
  • Een publiek kanaal blijft publiek voor elke geautoriseerde verbinding. Als de events bij één klant horen, gebruik dan een privékanaal en controleer de kanaalnaam in je endpoint.
  • Iedereen waarvoor je eigen auth-endpoints tekenen is geautoriseerd, dus een permissief endpoint deelt autorisatie net zo vrijelijk uit als de app-sleutel deed.

Volgende stappen

Gerelateerde bronnen

Ga verder met de documentatie, gidsen en voorbeelden voor dit onderwerp. De bronnen zijn in het Engels.

Probeer de oefening en ontvang een implementatieoverzicht