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));import BirdRealtime
let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: URL(string: "https://your-backend.example.com/bird/auth/member")
))
try await bird.signin()
let status = bird.subscribe("build-status")
status.bind("build-finished") { data in
render(data)
}import com.bird.realtime.BirdRealtime
import com.bird.realtime.BirdRealtimeOptions
val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
memberAuthEndpoint = "https://your-backend.example.com/bird/auth/member",
)
)
bird.signin() // suspending
val 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);
});bird.onError { error in
if error.code == 4009 { print(error.message) }
}bird.onError { error ->
if (error.code == 4009) println(error.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
- Kanalen autoriseren is de handtekening die je backend berekent voor privé- en presence-abonnementen.
- Privékanalen zijn het juiste middel wanneer de events zelf bij iemand horen.
- Ledenverbindingen beëindigen behandelt signin() en het andere gebruik van 4009.
- Events naar een lid sturen adresseert een event aan een aangemelde identiteit in plaats van een kanaal.
- Verbindingslevenscyclus en herverbinding legt uit waarom 4009 definitief is.
Gerelateerde bronnen
Ga verder met de documentatie, gidsen en voorbeelden voor dit onderwerp. De bronnen zijn in het Engels.
Ontdek de mogelijkheidRealtimeVolg het leerpadBuild your first integrationImplementatiegidsSend your first realtime event
Probeer de oefening en ontvang een implementatieoverzicht