Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.