Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Client verbindet sich mit Chat über eine Client-Zugriffs-URL , die seine Benutzeridentität trägt. Wer das Token ausgibt, entscheidet über die Benutzer-ID, sodass man beim Token einen Chat-Nutzer mit einer echten Identität in der App verknüpft.
Dieser Artikel zeigt zwei Möglichkeiten, ein Token zu erhalten: eine schnelle über das Azure-Portal zum Experimentieren und server-ausgegebene Token für die Produktion.
Option 1: Hol dir ein Token aus dem Portal (kurzer Versuch)
Für schnelle Tests erstelle eine Client-Zugriffs-URL im Portal. Es braucht keinen Code, aber die URL ist statisch und läuft ab, also nutze sie nur zum Experimentieren. Für die Schritt-für-Schritt-Portalanleitung siehe Erhalten Sie einen Client-Zugriffstoken vom Portal.
Option 2: Stellen Sie über Ihren Server ein Token aus (Produktion)
Im Produktivbetrieb stellt dein eigener Server Token aus. Dadurch bleiben Ihre Web-PubSub-Schlüssel auf dem Server, und Sie können die Benutzer-ID jedes Clients aus dem angemeldeten Benutzer statt aus Clienteingaben festlegen.
Fügen Sie einen Negotiate-Endpunkt hinzu
Der Server stellt einen Endpunkt frei, der eine Client-Zugriffs-URL zurückgibt. Dieses Beispiel verwendet Node.js mit Express und dem Web PubSub Server SDK.
Wählen Sie, wie der Server sich bei Web PubSub authentifiziert:
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"));
Important
Dieses Beispiel liest die Benutzer-ID aus der Abfragefolge, um sie kurz zu halten. In der Produktion wird die Benutzer-ID vom authentifizierten Benutzer (zum Beispiel aus seiner Sitzung) festgelegt, niemals aus der Client-Eingabe. Andernfalls könnte ein Aufrufer ein Token für jede Benutzer-ID anfordern.
Verbinden Sie den Client
Gib dem Client-SDK einen Callback, der eine URL von deinem Endpunkt abruft. Das SDK ruft es erneut auf, wann immer ein frisches Token benötigt wird, zum Beispiel nach einer erneuten Verbindung.
const client = await ChatClient.start({
getClientAccessUrl: async () => {
const res = await fetch("/negotiate?userId=alice");
const data = await res.json();
return data.url;
},
});
Token-Lebensdauer und Aktualisierung
Client-Zugriffstoken laufen ab. Eine Portal-URL und eine URL von getClientAccessToken sind standardmäßig beide 60 Minuten gültig.
- Bei einer statischen URL (Option 1) kann der Client nach Ablauf des Tokens nicht wieder verbinden. Das ist für schnelle Tests in Ordnung.
- Mit einem Callback (Option 2) fordert das SDK bei jeder erneuten Verbindung eine neue URL von Ihrem Server an, sodass langlebige Clients weiterhin funktionieren, ohne dass Sie den Ablauf nachverfolgen müssen.
Um die Lebensdauer zu ändern, legen Sie fest expirationTimeInMinutes , wann Sie anrufen getClientAccessToken.