Autenticar y conectar clientes

Un cliente se conecta al chat con una URL de acceso al cliente que lleva su identidad de usuario. Quien emite el token decide el ID de usuario, así que el token es donde vinculas a un usuario del chat con una identidad real en tu app.

Este artículo muestra dos formas de obtener un token: una rápida desde el portal de Azure para experimentar, y tokens emitidos por el servidor para producción.

Opción 1: Conseguir un token del portal (intento rápido)

Para pruebas rápidas, genera una URL de acceso al cliente en el portal. No necesita código, pero la URL es estática y caduca, así que úsala solo para experimentar. Para las instrucciones paso a paso del portal, consulte Obtener un token de acceso al cliente desde el portal.

Opción 2: Emitir un token desde tu servidor (producción)

En producción, tu propio servidor emite tokens. Esto mantiene tus claves Web PubSub en el servidor y te permite configurar el ID de usuario de cada cliente desde el usuario iniciado sesión en lugar de la entrada del cliente.

Añadir un punto final de negociación

El servidor expone un punto final que devuelve una URL de acceso al cliente. Este ejemplo utiliza Node.js con Express y el SDK del servidor Web PubSub.

Elige cómo el servidor se autentica en 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

Este ejemplo lee el ID de usuario de la cadena de consulta para mantenerlo corto. En producción, configura el ID de usuario a partir del usuario autenticado (por ejemplo, a partir de su sesión), nunca a partir de la entrada proporcionada por el cliente. De lo contrario, un llamante podría solicitar un token para cualquier ID de usuario.

Conecta el cliente

Proporciona al SDK del cliente una función de callback que obtenga una URL de tu endpoint. El SDK lo llama de nuevo siempre que necesita un token nuevo, como tras una reconexión.

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

Duración del token y renovación

Los tokens de acceso al cliente expiran. Una URL de portal y una URL de getClientAccessToken ambas duran 60 minutos por defecto.

  • Con una URL estática (Opción 1), el cliente no puede reconectarse después de que el token expire. Eso está bien para pruebas rápidas.
  • Con un callback (opción 2), el SDK solicita una nueva URL a tu servidor cada vez que se reconecta, por lo que los clientes de larga vida siguen funcionando sin que tengas que controlar la caducidad.

Para cambiar la vida útil, establece expirationTimeInMinutes cuando llames getClientAccessToken.

Pasos siguientes