Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een client maakt verbinding met Chat via een client access URL die zijn gebruikersidentiteit draagt. Wie het token uitgeeft, bepaalt de gebruikers-ID, dus bij het token koppel je een chatgebruiker aan een echte identiteit in je app.
Dit artikel toont twee manieren om een token te verkrijgen: een snelle via het Azure-portaal om te experimenteren, en server-uitgegeven tokens voor productie.
Optie 1: Haal een token uit het portaal (snelle poging)
Voor snelle tests genereer je een client access URL in het portaal. Het heeft geen code nodig, maar de URL is statisch en verloopt, dus gebruik het alleen voor experimenten. Voor de stapsgewijze portaalinstructies, zie Get a client access token from the portal.
Optie 2: Geef een token uit van je server (productie)
In productie geeft je eigen server tokens uit. Dit houdt je Web PubSub-sleutels op de server en laat je de gebruikers-ID van elke client instellen vanuit de ingelogde gebruiker in plaats van op clientinvoer.
Voeg een onderhandelend eindpunt toe
De server stelt een endpoint bloot dat een clienttoegangs-URL teruggeeft. Dit voorbeeld gebruikt Node.js met Express en de Web PubSub server SDK.
Kies hoe de server zich authenticeert bij 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"));
Important
Dit voorbeeld leest de gebruikers-ID uit de querystring om het kort te houden. In productie stel je de gebruikers-ID in vanaf de geauthenticeerde gebruiker (bijvoorbeeld uit hun sessie), nooit vanuit clientinvoer. Anders kan een aanroeper een token aanvragen voor elk gebruikers-ID.
Verbind de client
Geef de client SDK een callback die een URL van je endpoint ophaalt. De SDK roept het opnieuw aan wanneer er een nieuw token nodig is, bijvoorbeeld na een herverbinding (reconnect).
const client = await ChatClient.start({
getClientAccessUrl: async () => {
const res = await fetch("/negotiate?userId=alice");
const data = await res.json();
return data.url;
},
});
Levensduur van tokens en verversing
Clienttoegangstokens verlopen. Een portaal-URL en een URL van getClientAccessToken beide duren standaard 60 minuten.
- Met een statische URL (Optie 1) kan de client niet opnieuw verbinden nadat het token is verlopen. Dat is prima voor snelle tests.
- Bij een callback (optie 2) vraagt de SDK een nieuwe URL aan bij je server telkens wanneer hij opnieuw verbinding maakt, zodat langlopende clients blijven werken zonder dat je de vervaldatum volgt.
Om de levensduur te veranderen, stel expirationTimeInMinutes in wanneer je belt getClientAccessToken.