クライアントのクライアント アクセス URL を生成する方法
クライアント (ブラウザー 💻、モバイル アプリ 📱、または IoT デバイス 💡) では、クライアント アクセス URL を使用してリソースに接続して認証します。
URL のパターンは次のとおりです。
- MQTT クライアントの場合は、
wss://<service_name>.webpubsub.azure.com/clients/mqtt/hubs/<hub_name>?access_token=<token>
です。 - 他のすべてのクライアントでは、
wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>
です。
この記事では、クライアント アクセス URL を取得するいくつかの方法について説明します。
- すぐに始めるには、Azure portal からコピーします
- 開発のためには、Web PubSub サーバー SDK を使用して値を生成します
- Microsoft Entra ID を使用している場合は、Generate Client Token REST API を呼び出すこともできます
Azure portal からコピーする
Azure portal の [キー] タブには、次の図に示すように、クライアント アクセス URL をすばやく生成するためのクライアント URL ジェネレーター ツールがあります。 ここで入力した値は保存されません。
MQTT クライアントの場合は、[クライアント アクセス URL] テキスト ボックスの前にあるドロップダウン メニューで [MQTT クライアント] を選ぶ必要があることに注意してください。
サービス SDK から生成する
Web PubSub サーバー SDK を使用して、同じクライアント アクセス URL を生成できます。
サーバー SDK の概要に関する記事に従って、
WebPubSubServiceClient
オブジェクトservice
を作成しますWebPubSubServiceClient.getClientAccessToken
を呼び出して、クライアント アクセス URL を生成します。クライアント アクセス トークンを生成する
// for web pubsub native clients let token = await serviceClient.getClientAccessToken(); // for mqtt clients let token = await serviceClient.getClientAccessToken({ clientProtocol: "mqtt" });
ユーザー ID を構成する
let token = await serviceClient.getClientAccessToken({ userId: "user1" });
トークンの有効期間を構成する
let token = await serviceClient.getClientAccessToken({ expirationTimeInMinutes: 5, });
このクライアント アクセス URL を使用して接続するときに、グループ
group1
に直接参加できるロールを構成するlet token = await serviceClient.getClientAccessToken({ roles: ["webpubsub.joinLeaveGroup.group1"], });
このクライアント アクセス URL を使用して接続するときに、クライアントからグループ
group1
にメッセージを直接送信できるロールを構成するlet token = await serviceClient.getClientAccessToken({ roles: ["webpubsub.sendToGroup.group1"], });
このクライアント アクセス URL を使用して接続した後に、クライアントが参加するグループ
group1
を構成するlet token = await serviceClient.getClientAccessToken({ groups: ["group1"], });
実際のコードでは、通常、クライアント アクセス URL を生成するロジックをホストするサーバー側があります。 クライアント要求が入ると、サーバー側では、一般的な認証/認可ワークフローを使用してクライアント要求を検証できます。 クライアント アクセス URL を返すことができるのは、有効なクライアント要求だけです。
REST API :generateToken
から生成する
Microsoft Entra ID を使用し、Generate Client Token REST API を呼び出してトークンを生成することもできます。
Note
Web PubSub では、Microsoft Entra ID サービス プリンシパル用の Microsoft Entra ID トークンを手動で作成することはお勧めしません。 これは、各 Microsoft Entra ID トークンは有効期間が短く、通常は 1 時間以内に期限切れになるためです。 この時間が経過したら、代わりの Microsoft Entra ID トークンを手動で生成する必要があります。 代わりに、期限切れの Microsoft Entra ID トークンを自動的に生成して置き換える Microsoft の SDK を使用してください。
アプリケーションからの認可に関する記事に従って、Microsoft Entra ID を有効にします。
Microsoft Entra トークンを取得します。
Microsoft Entra トークンを使用して
:generateToken
を呼び出します。次の情報を集めます。
値の名前 値を取得する方法 TenantId TenantId は、登録したアプリケーションの [概要] ペインにある [ディレクトリ (テナント) ID] の値です。 ClientId ClientId は、登録したアプリケーションの [概要] ペインにある [アプリケーション (クライアント) ID] の値です。 ClientSecret ClientSecret は、手順 1 で追加したクライアント シークレットの値です Microsoft ID プラットフォームから Microsoft Entra ID トークンを取得する
CURL ツールを使用して、REST API を呼び出す方法を示します。 このツールは Windows 10/11 にバンドルされており、CURL のインストールに関する記事に従ってツールをインストールできます。
# set necessary values, replace the placeholders with your actual values export TenantId=<your_tenant_id> export ClientId=<your_client_id> export ClientSecret=<your_client_secret> curl -X POST "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ --data-urlencode "grant_type=client_credentials" \ --data-urlencode "client_id=$ClientId" \ --data-urlencode "client_secret=$ClientSecret" \ --data-urlencode "scope=https://webpubsub.azure.com/.default"
上記の curl コマンドを使用すると、Microsoft ID エンドポイントに POST 要求を送信して、Microsoft Entra ID トークンを取得することができます。 応答の
access_token
フィールドで Microsoft Entra ID トークンを確認できます。 後で使用するので、それをコピーして保存します。Microsoft Entra ID トークンを使用して
:generateToken
を呼び出します# Replace the values in {} with your actual values. export Hostname={your_service_hostname} export Hub={your_hub} export Microsoft_Entra_Token={Microsoft_entra_id_token_from_previous_step} curl -X POST "https://$Hostname/api/hubs/$Hub/:generateToken?api-version=2024-01-01" \ -H "Authorization: Bearer $Microsoft_Entra_Token" \ -H "Content-Type: application/json"
MQTT クライアントのトークンを生成する必要がある場合は、URL に
clientType=mqtt
パラメーターを追加します。export Hostname={your_service_hostname} export Hub={your_hub} export Microsoft_Entra_Token={Microsoft_entra_id_token_from_previous_step} curl -X POST "https://$Hostname/api/hubs/$Hub/:generateToken?api-version=2024-01-01&clientType=mqtt" \ -H "Authorization: Bearer $Microsoft_Entra_Token" \ -H "Content-Type: application/json"
cURL
コマンドを実行すると、次のような応答が返されます。{ "token": "ABCDEFG.ABC.ABC" }