Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Klient łączy się z usługą Chat za pomocą adresu URL dostępu klienta, który zawiera jego tożsamość użytkownika. Osoba, która wyda token, decyduje o identyfikatorze użytkownika, więc token to miejsce, gdzie łączysz użytkownika czatu z prawdziwą tożsamością w aplikacji.
Ten artykuł pokazuje dwa sposoby na zdobycie tokena: szybki z portalu Azure do eksperymentowania oraz tokeny wydawane przez serwer do produkcji.
Opcja 1: Zdobyć żeton z portalu (szybka próba)
Dla szybkich testów wygeneruj adres URL dostępu klienta w portalu. Nie wymaga kodu, ale adres URL jest statyczny i wygasa, więc używaj go tylko do eksperymentów. Instrukcje krok po kroku dotyczącą portalu znajdziesz w artykule Pobierz token dostępu klienta z portalu.
Opcja 2: Wydać token z serwera (produkcyjnego)
W środowisku produkcyjnym własny serwer wydaje tokeny. Dzięki temu klucze Web PubSub pozostają na serwerze i pozwalają ustawić identyfikator użytkownika każdego klienta z konta zalogowanego użytkownika, zamiast z wejścia klienta.
Dodaj punkt końcowy negocjacji
Serwer udostępnia punkt końcowy, który zwraca adres URL dostępu klienta. Ten przykład wykorzystuje Node.js z Express oraz serwerem Web PubSub SDK.
Wybierz sposób uwierzytelniania serwera do Web PubSub:
npm install express @azure/web-pubsub
import express from "express";
import { WebPubSubServiceClient } from "@azure/web-pubsub";
// Keep your connection string safe.
const connectionString = process.env.WebPubSubConnectionString;
const hubName = "chat"; // the hub where you enabled Chat
const app = express();
const serviceClient = new WebPubSubServiceClient(connectionString, hubName);
app.get("/negotiate", async (req, res) => {
const userId = req.query.userId;
if (!userId) {
return res.status(400).json({ error: "userId is required" });
}
const token = await serviceClient.getClientAccessToken({ userId });
res.json({ url: token.url });
});
app.listen(3000, () => console.log("Listening on http://localhost:3000"));
Ważna
Ten przykład odczytuje identyfikator użytkownika z parametrów zapytania, aby zachować zwięzłość. W produkcji ustawiaj identyfikator użytkownika od uwierzytelnionego użytkownika (na przykład z jego sesji), nigdy z wejścia klienta. W przeciwnym razie dzwoniący mógłby poprosić o token dla dowolnego identyfikatora użytkownika.
Połącz klienta
Przekaż klientowskiemu SDK funkcję zwrotną, która pobiera adres URL z Twojego punktu końcowego. SDK wywołuje go ponownie, gdy potrzebuje nowego tokena, na przykład po ponownym połączeniu.
const client = await ChatClient.start({
getClientAccessUrl: async () => {
const res = await fetch("/negotiate?userId=alice");
const data = await res.json();
return data.url;
},
});
Czas życia i odświeżanie tokena
Tokeny dostępu klienta wygasają. Domyślnie adres URL portalu i adres URL z getClientAccessToken są ważne przez 60 minut.
- Przy statycznym URL (Opcja 1) klient nie może się ponownie połączyć po wygaśnięciu tokena. To w porządku przy szybkich testach.
- W przypadku wywołania zwrotnego (Opcja 2) pakiet SDK pobiera z serwera nowy adres URL przy każdym ponownym połączeniu, dzięki czemu klienci utrzymujący długotrwałe połączenie nadal działają bez potrzeby śledzenia czasu wygaśnięcia.
Aby zmienić czas życia, ustaw expirationTimeInMinutes podczas wywołania getClientAccessToken.