Azure SignalR Service 支援 Microsoft Entra ID 用於授權來自 Azure 資源受控識別的要求。
本文說明如何設定您的資源和程序代碼,以使用受控識別來授權對資源的要求。
設定受控識別
第一個步驟是在您的應用程式或虛擬機上設定受控識別。
在 Azure 入口網站上新增角色指派
下列步驟說明如何將 SignalR App Server 角色指派給服務主體或 Azure SignalR 服務資源的受控識別。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
附註
您可以將角色指派給任何範圍,包括管理群組、訂用帳戶、資源群組或單一資源。 如需範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍。
在 Azure 入口網站中,移至您的 Azure SignalR Service 資源。
在左窗格中,選取存取控制 (IAM)。
選取 [新增>][新增角色指派]。
在 [角色] 索引標籤上,選取 [SignalR App Server]。 其他 Azure SignalR 服務內建角色取決於您的案例。
角色 說明 用例 SignalR 應用程式伺服器 存取建立伺服器連線併產生密鑰的 API。 最常用於在預設模式下執行 Azure SignalR 資源的應用程式伺服器。 SignalR Service 擁有者 所有數據平面 API 的完整存取權,包括 REST API、建立伺服器連線的 API,以及產生密鑰/令牌的 API。 用於與以無伺服器模式執行的 Azure SignalR 服務資源協作的協商伺服器。 它需要 REST API 許可權和驗證 API 許可權。 SignalR REST API 擁有者 資料平面 REST API 的完整存取權。 用於 Azure SignalR Management SDK 來管理連線和群組,但 不會 建立伺服器連線或處理交涉要求。 SignalR REST API 讀取者 資料平面 REST API 的唯讀存取權。 當您撰寫呼叫只讀 REST API 的監視工具時使用。 選取 下一步。
針對 Microsoft Entra 應用程式:
- 在 [存取權指派對象為] 資料列中,選取 [使用者、群組或服務主體]。
- 在 [ 成員 ] 資料列中,選擇 [選取成員],然後選擇彈出視窗中的身分識別。
針對 Azure 資源受控識別:
- 在 指派存取權給 列中,選取 受控身分。
- 在 [ 成員] 資料列中,選擇 [選取成員],然後在彈出視窗中選擇應用程式。
選取 下一步。
檢閱您的指派,然後選取 [ 檢閱 + 指派 ] 以確認角色指派。
重要
新增的角色指派最多可能需要 30 分鐘才能生效。
若要深入瞭解如何指派和管理 Azure 角色,請參閱:
- 使用 Azure 入口網站指派 Azure 角色
- 使用 REST API 指派 Azure 角色
- 使用 Azure PowerShell 指派 Azure 角色
- 使用 Azure CLI 指派 Azure 角色
- 使用 Azure Resource Manager 樣本指派 Azure 角色
設定適用於 C 的 Microsoft.Azure.SignalR 應用程式伺服器 SDK#
適用於 C 的 Azure SignalR 伺服器 SDK#
Azure SignalR 伺服器 SDK 會利用 Azure.Identity 連結庫 來產生令牌以連線到資源。 按兩下以探索詳細的使用方式。
使用系統指派的身分識別
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(new Uri("https://<resource-name>.service.signalr.net"), new ManagedIdentityCredential()),
};
});
使用使用者指派的身分識別
重要
使用用戶端識別碼,而非物件 (主體) 識別碼
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
var clientId = "<your-user-assigned-identity-client-id>";
new ServiceEndpoint(new Uri("https://<resource-name>.service.signalr.net"), new ManagedIdentityCredential(clientId)),
};
});
您可以在此範例連結中找到更多範例
使用多個端點
不同端點的認證可能不同。
在此範例中,Azure SignalR SDK 會使用系統指派的受控識別連線到 resource1,並使用使用者指派的受控識別連線到 resource2。
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
var clientId = "<your-user-assigned-identity-client-id>";
new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), new ManagedIdentityCredential()),
new ServiceEndpoint(new Uri("https://<resource2>.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
以下是 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
使用使用者指派的身分識別
如果您想要使用使用者指派的身分識別,除了具有連線名稱前置詞的 clientId 和 serviceUri 金鑰之外,還需要指派 credential。 以下是應用程式設定的範例:
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>
下一步
請參閱下列相關文章: