Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.