クライアントはユーザーIDを持つ クライアントアクセスURL でチャットに接続します。 トークンを発行した人がユーザーIDを決定します。つまりトークンはチャットユーザーをアプリ内の実際のIDに紐づけるものです。
この記事では、Azureポータルから実験用のクイックトークンと、本番環境用にサーバー発行トークンを取得する2つの方法を示しています。
選択肢1:ポータルからトークンを入手(クイックトライ)
簡単なテストのために、ポータルでクライアントアクセスURLを生成してください。 コードは不要ですが、URLは静的で期限切れなので、実験用に使うだけです。 ステップバイステップのポータルの手順については、「 ポータルからクライアントアクセストークンを取得する」をご覧ください。
オプション2:サーバー(本番環境)からトークンを発行する
本番環境では、自分のサーバーがトークンを発行します。 これによりWeb PubSubキーはサーバーに保存され、クライアント入力ではなくサインイン済みユーザーから各クライアントのユーザーIDを設定できます。
ネゴシエート エンドポイントを追加してください
サーバーはクライアントアクセスURLを返すエンドポイントを公開します。 この例ではExpressと Web PubSubサーバーSDKを組み合わせた Node.js を使用します。
サーバーが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
この例では、クエリ文字列からユーザーIDを読み取って簡潔にまとめています。 本番環境では、ユーザーIDは認証済みユーザー(例えばそのセッション)から設定し、クライアント入力からは設定しないでください。 そうでなければ、発信者は任意のユーザーIDに対してトークンを要求できます。
クライアントを接続してください
クライアントSDKにエンドポイントからURLを取得するコールバックを与えます。 SDKは、再接続後など新しいトークンが必要なときに再度呼び出します。
const client = await ChatClient.start({
getClientAccessUrl: async () => {
const res = await fetch("/negotiate?userId=alice");
const data = await res.json();
return data.url;
},
});
トークン寿命と更新
クライアントアクセストークンは期限切れになります。 ポータルのURLと getClientAccessToken のURLはどちらもデフォルトで60分間有効です。
- 静的URL(オプション1)では、トークンの期限切れ後にクライアントは再接続できません。 簡単なテストにはそれで十分です。
- コールバック(オプション2)では、SDKが再接続するたびにサーバーから新しいURLを要求するため、長寿命のクライアントは期限を追跡せずに動作し続けます。
有効期間を変更するには、expirationTimeInMinutes を呼び出すときに getClientAccessToken を設定します。
次のステップ
ルームの作成を管理を行います。