次の方法で共有


Microsoft Entra アプリケーションを使用して Azure SignalR Service リソースへの要求を承認する

Azure SignalR Service では、Microsoft Entra アプリケーションで要求を承認するための Microsoft Entra ID がサポートされています。

この記事では、Microsoft Entra アプリケーションを使用してリソースに対する要求を認証するようにリソースとコードを設定する方法について説明します。

アプリケーションを Microsoft Entra ID に登録する

最初の手順は、Microsoft Entra ID にアプリケーションを登録します:

アプリケーションを登録すると、アプリケーションの概要ページでアプリケーション (クライアント) IDディレクトリ (テナント) ID の値を確認できるようになります。 これらの GUID は、次の手順で役に立ちます。

登録済みアプリケーションの概要情報のスクリーンショット。

資格情報の追加

アプリを登録したら、証明書、クライアント シークレット (文字列)、またはフェデレーション ID 資格情報を資格情報として、機密クライアント アプリの登録に追加できます。 資格情報を使用すると、アプリケーションはそれ自体として認証でき、実行時にユーザーとの対話は必要なく、Web API にアクセスする機密クライアント アプリケーションによって使用されます。

Azure portal でロールの割り当てを追加する

次の手順では、SignalR App Server ロールを Azure SignalR Service リソースのサービス プリンシパルまたはマネージド ID に割り当てる方法について説明します。 詳細な手順については、「Azure portal を使用して Azure ロールを割り当てる」を参照してください。

管理グループ、サブスクリプション、リソース グループ、単一リソースなど、任意のスコープにロールを割り当てることができます。 スコープの詳細については、「Azure RBAC のスコープについて」を参照してください。

  1. Azure portal で、Azure SignalR Service リソースに移動します。

  2. 左のペインで アクセスの制御 (IAM) を選択します。

  3. [追加]>[ロール割り当ての追加] の順に選択します。

    [アクセス制御] のページと、ロールの割り当てを追加するための選択を示すスクリーンショット。

  4. [ロール] タブで、[SignalR App Server]\(SignalR アプリ サーバー\) を選択します。 その他の Azure SignalR Service 組み込みロールは、シナリオによって異なります。

    役割 説明 利用事例
    SignalR アプリ サーバー サーバー接続を作成し、キーを生成する API へのアクセス。 Azure SignalR リソースが既定モードで実行されているアプリ サーバーでよく使用されます。
    SignalR Service 所有者 REST API、サーバー接続を作成する API、キー/トークンを生成する API など、すべてのデータ プレーン API へのフル アクセス。 サーバーレス モードで実行されている Azure SignalR Service リソースを持つネゴシエーション サーバーに使用されます。 REST API のアクセス許可と認証 API のアクセス許可の両方が必要です。
    SignalR REST API 所有者 データプレーン REST API へのフル アクセス。 Azure SignalR Management SDK で接続とグループを管理するために使用されますが、サーバー接続やネゴシエーション要求の処理は行われません
    SignalR REST API リーダー データプレーン REST API への読み取り専用アクセス。 読み取り専用 REST API を呼び出す監視ツールを作成するときに使用されます。
  5. [次へ] を選択します。

  6. Microsoft Entra アプリケーションの場合:

    1. [ アクセス権の割り当て ] 行で、[ ユーザー、グループ、またはサービス プリンシパル] を選択します。
    2. [ メンバー ] 行で、[ メンバーの選択] を選択し、ポップアップ ウィンドウで ID を選択します。
  7. Azure リソースのマネージド ID の場合:

    1. [ アクセスの割り当て] 行で 、[ マネージド ID] を選択します。
    2. [ メンバー ] 行で、[ メンバーの選択] を選択し、ポップアップ ウィンドウでアプリケーションを選択します。
  8. [次へ] を選択します。

  9. 割り当てをレビューし、[ 確認と割り当て ] を選択して役割割り当てを確認します。

重要

新しく追加されたロールの割り当ては、反映されるまでに最大 30 分かかる場合があります。

Azure ロールを割り当てて管理する方法の詳細については、以下を参照してください。

C 用に Microsoft.Azure.SignalR アプリ サーバー SDK を構成する#

C# 用 Azure SignalR サーバー SDK

Azure SignalR サーバー SDK は、 Azure.Identity ライブラリ を利用して、リソースに接続するためのトークンを生成します。 クリックして詳細な使用状況を確認します。

メモ

tenantId は、SignalR リソースがあるテナントの tenantId と一致する必要があります。

証明書で Microsoft Entra アプリケーションを使用する

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");

    option.Endpoints = [
      new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

クライアント シークレットで Microsoft Entra アプリケーションを使用する

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential = new ClientSecretCredential("tenantId", "clientId", "clientSecret");

    option.Endpoints = [
      new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

フェデレーション ID で Microsoft Entra アプリケーションを使用する

組織でクライアント シークレット/証明書の使用を無効にした場合は、認証のためにマネージド ID を信頼するようにアプリケーションを構成できます。

詳細については、「 マネージド ID を信頼するようにアプリケーションを構成する (プレビュー)」を参照してください。

注釈

マネージド ID を信頼するようにアプリケーションを構成することはプレビュー機能です。

services.AddSignalR().AddAzureSignalR(option =>
{
    var msiCredential = new ManagedIdentityCredential("msiClientId");

    var credential = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
    {
        // Entra ID US Government: api://AzureADTokenExchangeUSGov
        // Entra ID China operated by 21Vianet: api://AzureADTokenExchangeChina
        var request = new TokenRequestContext([$"api://AzureADTokenExchange/.default"]);
        var response = await msiCredential.GetTokenAsync(request, ctoken).ConfigureAwait(false);
        return response.Token;
    });

    option.Endpoints = [
        new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

この資格情報は、ユーザー割り当てマネージド ID を使用して clientAssertion を生成し、それを使用して認証用の clientToken と交換します。

appClientIdtenantIdは、SignalR リソースのテナントでプロビジョニングしたエンタープライズ アプリケーションである必要があります。

複数のエンドポイントを使用する

資格情報は、エンドポイントごとに異なる場合があります。

このサンプルでは、Azure SignalR SDK はクライアント シークレットを使用して resource1 に接続し、証明書を使用して resource2 に接続します。

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential1 = new ClientSecretCredential("tenantId", "clientId", "clientSecret");
    var credential2 = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");

    option.Endpoints = new ServiceEndpoint[]
    {
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), credential1),
        new ServiceEndpoint(new Uri("https://<resource2>.service.signalr.net"), credential2),
    };
});

その他のサンプルについては、このサンプル リンクを参照してください。

Azure Functions における Azure SignalR Service のバインド

Azure Functions の Azure SignalR Service バインドでは、ポータルでアプリケーション設定を使用するか、ローカルで local.settings.json を使用して、Azure SignalR Service リソースにアクセスするように Microsoft Entra アプリケーション ID を構成します。

まず、Azure SignalR Service のサービス URI を指定する必要があります。 サービス URI のキーは serviceUri です。 接続名のプレフィックス (既定値は AzureSignalRConnectionString) と区切り記号で始まります。 区切り記号は、Azure portal のアンダースコア (__) と、: ファイルのコロン () です。 接続名は、binding プロパティ ConnectionStringSetting を使用してカスタマイズできます。 引き続きサンプルを参照してください。

次に、事前定義済みの環境変数または SignalR 指定された変数で Microsoft Entra アプリケーション ID を構成するかどうかを選びます。

事前定義済みの環境変数に ID を構成する

事前定義済みの環境変数の一覧については、「環境変数」を参照してください。 複数のサービスがある場合は、サービスごとに ID を構成しなくて済むよう、同じアプリケーション ID を使用することをお勧めします。 他のサービスでは、これらのサービスの設定に基づいて、これらの環境変数を使用することもできます。

たとえば、クライアント シークレットの資格情報を使用するには、local.settings.json ファイルで次のように ID を構成します。

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
    "AZURE_CLIENT_ID": "...",
    "AZURE_CLIENT_SECRET": "...",
    "AZURE_TENANT_ID": "..."
  }
}

Azure portal で、次のように設定を追加します。

 <CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
AZURE_CLIENT_ID = ...
AZURE_TENANT_ID = ...
AZURE_CLIENT_SECRET = ...

SignalR 指定された変数での ID の構成

SignalR 指定された変数は、serviceUri キーと同じキー プレフィックスを共有します。 使用する可能性がある変数は、次のとおりです。

  • clientId
  • clientSecret
  • tenantId

local.settings.json ファイルでクライアント シークレットの資格情報を使用するサンプルは次のとおりです。

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
    "<CONNECTION_NAME_PREFIX>:clientId": "...",
    "<CONNECTION_NAME_PREFIX>:clientSecret": "...",
    "<CONNECTION_NAME_PREFIX>:tenantId": "..."
  }
}

Azure portal で、次のように設定を追加します。

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__clientId = ...
<CONNECTION_NAME_PREFIX>__clientSecret = ...
<CONNECTION_NAME_PREFIX>__tenantId = ...

次のステップ

次の関連記事を参照してください。