Uwierzytelniaj i łącz klientów

Klient łączy się z usługą Chat za pomocą adresu URL dostępu klienta, który zawiera jego tożsamość użytkownika. Osoba, która wyda token, decyduje o identyfikatorze użytkownika, więc token to miejsce, gdzie łączysz użytkownika czatu z prawdziwą tożsamością w aplikacji.

Ten artykuł pokazuje dwa sposoby na zdobycie tokena: szybki z portalu Azure do eksperymentowania oraz tokeny wydawane przez serwer do produkcji.

Opcja 1: Zdobyć żeton z portalu (szybka próba)

Dla szybkich testów wygeneruj adres URL dostępu klienta w portalu. Nie wymaga kodu, ale adres URL jest statyczny i wygasa, więc używaj go tylko do eksperymentów. Instrukcje krok po kroku dotyczącą portalu znajdziesz w artykule Pobierz token dostępu klienta z portalu.

Opcja 2: Wydać token z serwera (produkcyjnego)

W środowisku produkcyjnym własny serwer wydaje tokeny. Dzięki temu klucze Web PubSub pozostają na serwerze i pozwalają ustawić identyfikator użytkownika każdego klienta z konta zalogowanego użytkownika, zamiast z wejścia klienta.

Dodaj punkt końcowy negocjacji

Serwer udostępnia punkt końcowy, który zwraca adres URL dostępu klienta. Ten przykład wykorzystuje Node.js z Express oraz serwerem Web PubSub SDK.

Wybierz sposób uwierzytelniania serwera do 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"));

Ważna

Ten przykład odczytuje identyfikator użytkownika z parametrów zapytania, aby zachować zwięzłość. W produkcji ustawiaj identyfikator użytkownika od uwierzytelnionego użytkownika (na przykład z jego sesji), nigdy z wejścia klienta. W przeciwnym razie dzwoniący mógłby poprosić o token dla dowolnego identyfikatora użytkownika.

Połącz klienta

Przekaż klientowskiemu SDK funkcję zwrotną, która pobiera adres URL z Twojego punktu końcowego. SDK wywołuje go ponownie, gdy potrzebuje nowego tokena, na przykład po ponownym połączeniu.

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

Czas życia i odświeżanie tokena

Tokeny dostępu klienta wygasają. Domyślnie adres URL portalu i adres URL z getClientAccessToken są ważne przez 60 minut.

  • Przy statycznym URL (Opcja 1) klient nie może się ponownie połączyć po wygaśnięciu tokena. To w porządku przy szybkich testach.
  • W przypadku wywołania zwrotnego (Opcja 2) pakiet SDK pobiera z serwera nowy adres URL przy każdym ponownym połączeniu, dzięki czemu klienci utrzymujący długotrwałe połączenie nadal działają bez potrzeby śledzenia czasu wygaśnięcia.

Aby zmienić czas życia, ustaw expirationTimeInMinutes podczas wywołania getClientAccessToken.

Następne kroki