Autentique e conecte clientes

Um cliente se conecta ao Chat com uma URL de acesso ao cliente que carrega sua identidade de usuário. Quem emite o token decide o ID do usuário, então o token é onde você vincula um usuário do chat a uma identidade real no seu app.

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

Opção 1: Pegar um token no portal (tentativa rápida)

Para testes rápidos, gere uma URL de acesso ao cliente no portal. Não precisa de código, mas a URL é estática e expira, então use apenas para experimentar. Para as instruções passo a passo do portal, veja Obter um token de acesso ao cliente do portal.

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

Em produção, seu próprio servidor emite tokens. Isso mantém suas chaves Web PubSub no servidor e permite definir o ID de usuário de cada cliente a partir do usuário logado, em vez de a entrada do cliente.

Adicionar um endpoint de negociação

O servidor expõe um endpoint que retorna uma URL de acesso ao cliente. Este exemplo usa 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"));

Importante

Este exemplo lê o ID do usuário da string de consulta para mantê-lo curto. Em produção, defina o ID do usuário com base no usuário autenticado (por exemplo, a partir da sessão do usuário), nunca com base na entrada fornecida pelo cliente. Caso contrário, um chamador poderia solicitar um token para qualquer ID de usuário.

Conecte o cliente

Dê ao SDK do cliente um callback que busque uma URL do seu endpoint. O SDK o chama 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

Tokens de acesso ao cliente expiram. A URL do portal e a URL de getClientAccessToken têm duração de 60 minutos por padrão.

  • Com uma URL estática (Opção 1), o cliente não pode se reconectar após o vencimento do token. Isso é ótimo para testes rápidos.
  • Com um retorno de chamada (Opção 2), o SDK solicita uma nova URL do seu servidor sempre que se reconecta, de modo que clientes de longa duração continuem funcionando sem que você precise rastrear a expiração.

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

Próximas Etapas