共用方式為


使用 Microsoft Entra 受控識別授權對 Azure SignalR Service 資源的要求

Azure SignalR Service 支援 Microsoft Entra ID 用於授權來自 Microsoft Entra 受控識別的要求。

本文說明如何設定您的 Azure SignalR Service 資源和程式碼,以授權來自受控識別的資源要求。

設定受控識別

第一步是設定受控識別。

此範例示範如何使用 Azure 入口網站,在虛擬機器 (VM) 上設定系統指派的受控識別:

  1. Azure 入口網站中,搜尋並選取 VM。

  2. 在 [設定] 底下,選取 [身分識別]

  3. [系統指派] 索引標籤上,將 [狀態] 切換為 [開啟]

    針對虛擬機開啟系統指派受控識別的選項螢幕快照。

  4. 選取 [儲存] 按鈕以確認變更。

若要了解如何建立使用者指派的受控識別,請參閱建立使用者指派的受控識別

若要深入瞭解如何設定受控識別,請參閱下列其中一篇文章:

若要了解如何設定 Azure App Service 和 Azure Functions 的受控識別,請參閱如何使用 App Service 和 Azure Functions 的受控識別

在 Azure 入口網站上新增角色指派

下列步驟說明如何透過 Azure SignalR Service 資源,將 SignalR App Server 角色指派給系統指派的身分識別。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色

注意

角色可以指派給任何範圍,包括管理群組、訂閱、資源群組或單一資源。 如需範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍

  1. Azure 入口網站中,移至您的 Azure SignalR Service 資源。

  2. 選取 [存取控制 (IAM)]。

  3. 選取 [新增>][新增角色指派]。

    此螢幕快照顯示用於新增角色指派的訪問控制頁面和選取專案。

  4. 在 [角色] 索引標籤上,選取 [SignalR App Server]

  5. 在 [成員] 索引標籤上,選取 [受控識別],然後選擇 [選取成員]

  6. 選取 Azure 訂閱。

  7. 選取 [系統指派的受控識別],搜尋您要指派角色的虛擬機器,然後加以選取。

  8. 在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。

重要

Azure 角色指派最多需要 30 分鐘的時間來傳播。

若要進一步了解如何指派和管理 Azure 角色,請參閱以下文章:

設定您的應用程式

應用程式伺服器

使用系統指派的身分識別

您可以使用 DefaultAzureCredentialManagedIdentityCredential 來設定 Azure SignalR Service 端點。 最佳做法是直接使用 ManagedIdentityCredential

預設使用系統指派的受控識別,但如果您目前使用 DefaultAzureCredential切勿設定 EnvironmentCredential 所保留的任何環境變數。 否則,Azure SignalR Service 會回復為使用 EnvironmentCredential 來提出要求,這通常會導致 Unauthorized 回應。

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
    };
});

使用使用者指派的身分識別

在建立 ManagedIdentityCredential 物件時提供 ClientId

重要

使用用戶端識別碼,而不是物件 (主體) 識別碼,即使兩者都是 GUID。

services.AddSignalR().AddAzureSignalR(option =>
{
    option.Endpoints = new ServiceEndpoint[]
    {
        var clientId = "<your identity client id>";
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
    };

Azure Functions 中的 Azure SignalR Service 繫結

Azure Functions 中的 Azure SignalR Service 繫結會在入口網站中使用應用程式設定,或在本機使用 local.settings.json 來設定受控識別,以存取您的 Azure SignalR Service 資源。

您可能需要使用機碼值組設定身分識別。 所有機碼值組的索引碼開頭都必須為一個連線名稱前置詞 (預設為 AzureSignalRConnectionString) 加上一個分隔符號。 分隔符號在入口網站中是底線 (__),在本機則是冒號 (:)。 您可以使用繫結屬性 ConnectionStringSetting 來自訂前置詞。

使用系統指派的身分識別

如果您只設定服務 URI,請使用 DefaultAzureCredential 類別。 當您想要在 Azure 和本機開發環境中共用相同設定時,這個類別非常有用。 若要了解運作方式,請參閱 DefaultAzureCredential

在 Azure 入口網站中,使用下列範例來設定 DefaultAzureCredential。 如果您未設定任何這些環境變數,則會使用系統指派的身分識別進行驗證。

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

以下是 local.settings.json 檔案中 DefaultAzureCredential 的組態範例。 在本機範圍內,沒有受控識別。 依序會嘗試透過 Visual Studio、Azure CLI 和 Azure PowerShell 帳戶進行驗證。

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

如果您想獨立使用系統指派的身分識別,而不受其他環境變數的影響,請將含有連線名稱前置詞的 credential 索引鍵設為 managedidentity。 以下是應用程式設定的範例:

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity

使用使用者指派的身分識別

如果您想要使用使用者指派的身分識別,除了具有連線名稱前置詞的 serviceUricredential 金鑰之外,還需要指派 clientId。 以下是應用程式設定的範例:

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>

下一步

請參閱下列相關文章: