Autentica e collega i client

Un client si collega alla Chat tramite un URL di accesso al client che contiene l'identità dell'utente. Chi emette il token decide l'ID utente, quindi il token è dove leghi un utente della chat a una vera identità nella tua app.

Questo articolo mostra due modi per ottenere un token: uno rapido dal portale Azure per sperimentare, e i token emessiti dal server per la produzione.

Opzione 1: Ottenere un gettone dal portale (prova veloce)

Per test rapidi, genera un URL di accesso client nel portale. Non ha bisogno di codice, ma l'URL è statico e scade, quindi usalo solo per sperimentare. Per le istruzioni passo dopo passo sul portale, vedi Ottieni un token di accesso client dal portale.

Opzione 2: Emettere un token dal tuo server (produzione)

In produzione, il tuo server emette i token. Questo mantiene le chiavi Web PubSub sul server e ti permette di impostare l'ID utente di ogni cliente dall'utente connesso invece che dall'input del client.

Aggiungi un endpoint negoziato

Il server espone un endpoint che restituisce un URL di accesso al client. Questo esempio utilizza Node.js con Express e il Web PubSub server SDK.

Scegli come il server si autentica su 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"));

Importante

Questo esempio legge l'ID utente dalla stringa di query per mantenerla breve. In produzione, imposta l'ID utente in base all'utente autenticato (ad esempio, dalla relativa sessione), mai dall'input proveniente dal client. Altrimenti, un chiamante potrebbe richiedere un token per qualsiasi ID utente.

Collega il client

Dai al client SDK un callback che ottiene un URL dal tuo endpoint. L'SDK lo richiama ogni volta che ha bisogno di un token nuovo, ad esempio dopo una riconnessione.

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

Durata della vita del token e aggiornamento

I token di accesso del client scadono. Un URL del portale e un URL da getClientAccessToken hanno entrambi una durata predefinita di 60 minuti.

  • Con un URL statico (Opzione 1), il client non può riconnettersi dopo la scadenza del token. Va bene per test rapidi.
  • Con un callback (Opzione 2), l'SDK richiede un nuovo URL al tuo server ogni volta che si riconnette, così i client longevi continuano a lavorare senza che tu debba tracciare la scadenza.

Per cambiare la durata, imposta expirationTimeInMinutes quando chiami getClientAccessToken.

Passaggi successivi