Autentisera och koppla klienter

En klient ansluter till Chat med en klientåtkomst-URL som bär dess användaridentitet. Den som utfärdar token bestämmer användar-ID:t, så token är där du kopplar en chattanvändare till en verklig identitet i din app.

Den här artikeln visar två sätt att få en token: ett snabbt från Azure-portalen för experiment, och serverutfärdade tokens för produktion.

Alternativ 1: Hämta en token från portalen (snabbt försök)

För snabba tester, generera en kundåtkomst-URL i portalen. Det kräver ingen kod, men URL:en är statisk och går ut, så använd den bara för experiment. För steg-för-steg-instruktionerna för portalen, se Hämta en klientåtkomsttoken från portalen.

Alternativ 2: Utfärda en token från din server (produktion)

I produktionsmiljö utfärdar din egen server token. Detta behåller dina Web PubSub-nycklar på servern och låter dig ställa in varje klients användar-ID från den inloggade användaren istället för från klientens inmatning.

Lägg till en förhandlingsslutpunkt

Servern exponerar en slutpunkt som returnerar en klientåtkomst-URL. Detta exempel använder Node.js med Express och Web PubSub server SDK.

Välj hur servern autentiserar sig mot 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

Detta exempel läser användar-ID från frågesträngen för att hålla det kort. I produktion, sätt användar-ID från den autentiserade användaren (till exempel från deras session), aldrig från klientinmatning. Annars kan en anropare begära en token för vilket användar-ID som helst.

Koppla klienten

Ge klient-SDK:n en callback som hämtar en URL från din endpoint. SDK:n anropar den igen när den behöver en ny token, till exempel efter en återanslutning.

const client = await ChatClient.start({
  getClientAccessUrl: async () => {
    const res = await fetch("/negotiate?userId=alice");
    const data = await res.json();
    return data.url;
  },
});

Tokens livslängd och uppdatering

Klientåtkomsttokens går ut. En portal-URL och en URL från getClientAccessToken båda varar som standard i 60 minuter.

  • Med en statisk URL (Alternativ 1) kan klienten inte återansluta efter att tokenen har gått ut. Det är okej för snabba tester.
  • Med en callback (alternativ 2) begär SDK:n en ny URL från din server varje gång den återansluter, vilket gör att klienter med lång livslängd fortsätter att fungera utan att du behöver hålla reda på när URL:en upphör att gälla.

För att ändra livslängden, sätt expirationTimeInMinutes när du ringer getClientAccessToken.

Nästa steg