Autenticar e ligar clientes

Um cliente liga-se ao Chat com uma URL de acesso ao cliente que transporta a identidade do seu utilizador. Quem emite o token decide o ID do utilizador, por isso o token é onde ligas um utilizador de chat a uma identidade real na tua aplicação.

Este artigo mostra duas formas de obter um token: uma rápida do portal Azure para experimentação, e tokens emitidos pelo servidor para produção.

Opção 1: Obter um token do portal (tentativa rápida)

Para testes rápidos, gere um URL de acesso ao cliente no portal. Não precisa de código, mas o URL é estático e expira, por isso usa-o apenas para experimentar. Para as instruções passo a passo do portal, consulte Obter um token de acesso ao cliente do portal.

Opção 2: Emitir um token a partir do seu servidor (produção)

Em produção, o teu próprio servidor emite tokens. Isto mantém as suas chaves do Web PubSub no servidor e permite-lhe definir o ID de utilizador de cada cliente com base no utilizador com sessão iniciada, em vez de nos dados introduzidos pelo cliente.

Adicionar um endpoint de negociação

O servidor expõe um endpoint que devolve uma URL de acesso ao cliente. Este exemplo utiliza Node.js com Express e o Web PubSub Server SDK.

Escolha como o servidor se autentica no 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

Este exemplo lê o ID do utilizador da cadeia de consulta para o manter curto. Em produção, defina o ID do utilizador com base no utilizador autenticado (por exemplo, na sua sessão), nunca a partir de dados fornecidos pelo cliente. Caso contrário, um chamador poderia pedir um token para qualquer ID de utilizador.

Liga o cliente

Dê ao SDK do cliente um callback que obtenha uma URL do seu endpoint. O SDK chama-o novamente sempre que precisa de um token novo, como após uma reconexão.

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

Vida útil do token e atualização

Os tokens de acesso do cliente expiram. Por predefinição, um URL do portal e um URL de getClientAccessToken são válidos durante 60 minutos.

  • Com uma URL estática (Opção 1), o cliente não pode reconectar-se depois de o token expirar. Isso é bom para testes rápidos.
  • Com um callback (Opção 2), o SDK solicita um novo endereço URL ao seu servidor sempre que restabelece a ligação, para que os clientes de longa duração continuem a funcionar sem ter de controlar a expiração.

Para alterar o tempo de vida, defina expirationTimeInMinutes ao chamar getClientAccessToken.

Passos seguintes