Kontroluj, kto się łączy i subskrybuje, korzystając z istniejących reguł sesji.
Dostarczaj prywatne aktualizacje zamówień, alerty konta i zdarzenia obszaru roboczego do klientów w przeglądarce i na urządzeniach mobilnych bez ujawniania poświadczeń backendu w kodzie klienta. Twój własny endpoint uwierzytelniania sprawdza sesję wywołującego i podpisuje subskrypcje kanałów prywatnych lub kanałów obecności dla każdego połączenia, a szyfrowanie end-to-end zabezpiecza poufne dane, zanim opuszczą Twój serwer.
auth.ts
200 · podpisane403 · Forbidden200 · podpisane200 · podpisane// Your endpoint. The only place the app secret lives.app.post("/bird/auth", async (req, res) => { const { connection_id, channel_name } = req.body; const user = await session(req); if (!mayJoin(user, channel_name)) return res.sendStatus(403); // Signs <connection_id>:<channel_name>[:<member_data>] with the app // secret, and adds shared_secret on an encrypted channel. res.json( await bird.realtime.authorizeChannel({ connectionId: connection_id, channelName: channel_name, memberData: JSON.stringify({ member_id: user.id, member_info: { name: user.name }, }), }), );});
POST/bird/auth
Treść odpowiedzi
{ "auth": "d0e95a856ddc1b09d4c8:8f9a2c71e4…", "member_data": "{\"member_id\":\"u_42\",\"member_info\":{\"name\":\"Maya Chen\"}}" }
auth.ts
200 · podpisane403 · Forbidden200 · podpisane200 · podpisane// Your endpoint. The only place the app secret lives.app.post("/bird/auth", async (req, res) => { const { connection_id, channel_name } = req.body; const user = await session(req); if (!mayJoin(user, channel_name)) return res.sendStatus(403); // Signs <connection_id>:<channel_name>[:<member_data>] with the app // secret, and adds shared_secret on an encrypted channel. res.json( await bird.realtime.authorizeChannel({ connectionId: connection_id, channelName: channel_name, memberData: JSON.stringify({ member_id: user.id, member_info: { name: user.name }, }), }), );});
POST/bird/auth
Treść odpowiedzi
{ "auth": "d0e95a856ddc1b09d4c8:8f9a2c71e4…", "member_data": "{\"member_id\":\"u_42\",\"member_info\":{\"name\":\"Maya Chen\"}}" }
auth.ts
200 · podpisane403 · Forbidden200 · podpisane200 · podpisane// Your endpoint. The only place the app secret lives.app.post("/bird/auth", async (req, res) => { const { connection_id, channel_name } = req.body; const user = await session(req); if (!mayJoin(user, channel_name)) return res.sendStatus(403); // Signs <connection_id>:<channel_name>[:<member_data>] with the app // secret, and adds shared_secret on an encrypted channel. res.json( await bird.realtime.authorizeChannel({ connectionId: connection_id, channelName: channel_name, memberData: JSON.stringify({ member_id: user.id, member_info: { name: user.name }, }), }), );});
POST/bird/auth
Treść odpowiedzi
{ "auth": "d0e95a856ddc1b09d4c8:8f9a2c71e4…", "member_data": "{\"member_id\":\"u_42\",\"member_info\":{\"name\":\"Maya Chen\"}}" }
Udostępniaj klientom klucz publiczny,
a sekrety do podpisywania trzymaj na swoim serwerze.
Aplikacja w Bird Realtime API oddziela poświadczenia połączeń klienckich od uprawnień backendu. Przeglądarki i aplikacje mobilne otwierają połączenia WebSocket za pomocą publicznego klucza aplikacji, który można bezpiecznie osadzić w paczkach klienta, a Twój backend przechowuje sekret służący do publikowania zdarzeń i podpisywania tokenów subskrypcji. Gdy Twoja polityka bezpieczeństwa wymaga rotacji poświadczeń, możesz utworzyć drugą parę kluczy, wdrożyć ją we wszystkich usługach i unieważnić poprzednią parę bez rozłączania aktywnych użytkowników.
Chroń połączenia, kanały i dane na każdej warstwie
Weryfikuj, kto może otworzyć gniazdo, autoryzuj kanały, do których dołącza, szyfruj poufne dane zdarzeń i odcinaj dostęp po zakończeniu sesji.
- 01
Podpisane subskrypcje kanałów.
Gdy klient w przeglądarce lub na urządzeniu mobilnym subskrybuje kanał prywatny lub kanał obecności, Twój backend sprawdza sesję użytkownika i podpisuje token HMAC-SHA256 powiązany z konkretnym identyfikatorem połączenia i nazwą kanału. Powiązanie podpisu z identyfikatorem gniazda uniemożliwia ponowne użycie tokenu w innym połączeniu, a podpisy obecności dodatkowo utrwalają tożsamość uczestnika wyświetlaną w pokoju.
- 02
Uwierzytelnione połączenia WebSocket.
Publiczny klucz aplikacji znajduje się w kodzie klienta, więc każdy odwiedzający może spróbować otworzyć bezczynne połączenie WebSocket. Po włączeniu autoryzowanych połączeń nowe gniazdo musi uwierzytelnić się przez Twój backend w ciągu 30 sekund, logując się lub subskrybując kanał prywatny. Niezweryfikowane gniazda zamykają się automatycznie i nie wliczają się do limitu połączeń.
- 03
Dane szyfrowane end-to-end.
W przypadku regulowanych lub poufnych aktualizacji serwerowe SDK szyfruje dane zdarzeń lokalnie 32-bajtowym kluczem głównym, który pozostaje w Twojej infrastrukturze. Każdy szyfrowany kanał wyprowadza własny klucz deszyfrujący, więc dopuszczenie klienta do jednego poufnego strumienia nie daje dostępu do innego, a serwery pośrednie widzą w transmisji tylko szyfrogram.
- 04
Natychmiastowe unieważnianie sesji.
Gdy użytkownik się wyloguje, zmieni hasło lub straci dostęp do obszaru roboczego, jedno wywołanie serwera rozłącza jego tożsamość uczestnika we wszystkich otwartych kartach przeglądarki i na urządzeniach mobilnych. Klienci traktują zakończenie jako ostateczne i nie łączą się ponownie w pętli, a Twój endpoint uwierzytelniania może odrzucać kolejne próby logowania po unieważnieniu sesji.
Szyfrowane kanały
Szyfruj poufne dane, zanim opuszczą Twój serwer.
Skonfiguruj 32-bajtowy klucz główny w serwerowym SDK, aby szyfrować poufne zdarzenia we własnym procesie przed publikacją. Bird przekazuje zaszyfrowaną kopertę subskrybentom, a Twój endpoint autoryzacji dostarcza zatwierdzonym klientom w przeglądarce wyprowadzony klucz deszyfrujący kanału. Możesz też połączyć szyfrowanie z buforowaniem ostatniego zdarzenia, aby nowo połączeni klienci otrzymywali najnowszy stan jako szyfrogram. Nadawaj kanałom i zdarzeniom ogólne nazwy, ponieważ metadane routingu pozostają niezaszyfrowane.
const bird = new BirdClient({
apiKey: process.env.BIRD_API_KEY!,
realtime: {
key: process.env.BIRD_REALTIME_KEY,
secret: process.env.BIRD_REALTIME_SECRET,
// 32 random bytes, yours alone. Never sent to Bird.
encryptionMasterKey: process.env.BIRD_REALTIME_MASTER_KEY,
},
});
// Sealed in your process. The edge forwards ciphertext.
await bird.realtime.publish(APP_ID, {
event: "order.updated",
channels: ["private-encrypted-orders"],
data: { order_id: "ord_123", status: "shipped" },
});
Izoluj strumienie najemców i weryfikuj stan na swoim serwerze.
Uwierzytelnianie połączeń i autoryzacja kanałów odpowiadają za różne części kontroli dostępu. Wymóg autoryzowanych połączeń blokuje anonimowe gniazda, a kanały prywatne i kanały obecności ograniczają, który zalogowany użytkownik lub najemca może czytać dany strumień. Przesyłaj aktualizacje dotyczące konkretnych klientów kanałami prywatnymi weryfikowanymi przez Twój endpoint uwierzytelniania, używaj zdarzeń klient-klient do ulotnych sygnałów interfejsu, takich jak wskaźniki pisania, a działania zmieniające stan kieruj przez swój backend.
Przypisz ruch do regionu i izoluj środowiska za pomocą aplikacji.
Wybierz dedykowany region podczas tworzenia aplikacji Realtime, aby połączenia WebSocket i publikowane zdarzenia były blisko Twoich użytkowników, nawet jeśli region macierzysty obszaru roboczego jest gdzie indziej. Każda aplikacja działa we własnej, odizolowanej przestrzeni nazw z osobnymi poświadczeniami i limitami, więc osobne aplikacje dla środowisk deweloperskiego, testowego i produkcyjnego utrzymują testowe transmisje z dala od kanałów klientów.
Przewodniki wdrożeniowe dla Twojego backendu.
Format żądania webhooka i funkcje pomocnicze SDK do podpisywania znajdziesz w przewodniku autoryzacja kanałów. Przeczytaj wymaganie autoryzowanych połączeń, aby wymusić 30-sekundowe uzgadnianie połączenia, szyfrowane kanały, aby skonfigurować klucze główne i ich rotację, oraz kończenie połączeń uczestników, aby podłączyć logowanie użytkowników i zdalne rozłączanie.
Twórz dalej
z Realtime.
Łącz autoryzację kanałów z obecnością na żywo, buforowaniem stanu i webhookami backendu, korzystając z tych samych poświadczeń aplikacji.
Kanały
Kieruj publiczne transmisje, prywatne strumienie, zaszyfrowane dane i buforowany stan według prefiksu kanału.
→Obecność
Pokazuj, kto jest online na różnych kartach i urządzeniach, śledź odejścia i wysyłaj wiadomości bezpośrednio do poszczególnych użytkowników.
→Webhooks
Uruchamiaj procesy backendu, gdy kanały stają się aktywne, uczestnicy wychodzą lub bufor wymaga rozgrzania.
→Skaluj bez
utraty kontroli.
Organizuj zespoły w obszarach roboczych, kontroluj dostęp do API i śledź zmiany w logach audytu.
Organizacja
Harbor
Dostęp pozostaje w swoim obszarze roboczym.
Produkcja/Klucze API
Backend portowy
AktywnaAlex Lee
Admin
Dziś · UTC
Dziennik audytu
Organizacja
Harbor
Dostęp pozostaje w swoim obszarze roboczym.
Produkcja/Klucze API
Backend portowy
AktywnaAlex Lee
Admin
Dziś · UTC
Dziennik audytu
Organizacja
Harbor
Dostęp pozostaje w swoim obszarze roboczym.
Produkcja/Klucze API
Backend portowy
AktywnaAlex Lee
Admin
Dziś · UTC
Dziennik audytu