使用 Microsoft Entra 受控識別授權對 Azure SignalR Service 資源的要求
Azure SignalR Service 支援 Microsoft Entra ID 用於授權來自 Microsoft Entra 受控識別的要求。
本文說明如何設定您的 Azure SignalR Service 資源和程式碼,以授權來自受控識別的資源要求。
設定受控識別
第一步是設定受控識別。
此範例示範如何使用 Azure 入口網站,在虛擬機器 (VM) 上設定系統指派的受控識別:
在 Azure 入口網站中,搜尋並選取 VM。
在 [設定] 底下,選取 [身分識別]。
在 [系統指派] 索引標籤上,將 [狀態] 切換為 [開啟]。
選取 [儲存] 按鈕以確認變更。
若要了解如何建立使用者指派的受控識別,請參閱建立使用者指派的受控識別。
若要深入瞭解如何設定受控識別,請參閱下列其中一篇文章:
- 使用 Azure 入口網站在虛擬機器上設定 Azure 資源的受控識別
- 使用 PowerShell 在 Azure VM 上設定 Azure 資源受控識別
- 使用 Azure CLI 在 Azure VM 上設定 Azure 資源的受控識別
- 使用範本在 Azure VM 上設定 Azure 資源的受控識別
- 使用 Azure SDK 以 Azure 資源管理的受控識別設定 VM
若要了解如何設定 Azure App Service 和 Azure Functions 的受控識別,請參閱如何使用 App Service 和 Azure Functions 的受控識別。
在 Azure 入口網站上新增角色指派
下列步驟說明如何透過 Azure SignalR Service 資源,將 SignalR App Server 角色指派給系統指派的身分識別。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
注意
角色可以指派給任何範圍,包括管理群組、訂閱、資源群組或單一資源。 如需範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍。
在 Azure 入口網站中,移至您的 Azure SignalR Service 資源。
選取 [存取控制 (IAM)]。
選取 [新增>][新增角色指派]。
在 [角色] 索引標籤上,選取 [SignalR App Server]。
在 [成員] 索引標籤上,選取 [受控識別],然後選擇 [選取成員]。
選取 Azure 訂閱。
選取 [系統指派的受控識別],搜尋您要指派角色的虛擬機器,然後加以選取。
在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。
重要
Azure 角色指派最多需要 30 分鐘的時間來傳播。
若要進一步了解如何指派和管理 Azure 角色,請參閱以下文章:
- 使用 Azure 入口網站指派 Azure 角色
- 使用 REST API 指派 Azure 角色
- 使用 Azure PowerShell 指派 Azure 角色
- 使用 Azure CLI 指派 Azure 角色
- 使用 Azure Resource Manager 範本指派 Azure 角色
設定您的應用程式
應用程式伺服器
使用系統指派的身分識別
您可以使用 DefaultAzureCredential 或 ManagedIdentityCredential 來設定 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
使用使用者指派的身分識別
如果您想要使用使用者指派的身分識別,除了具有連線名稱前置詞的 serviceUri
和 credential
金鑰之外,還需要指派 clientId
。 以下是應用程式設定的範例:
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__credential = managedidentity
<CONNECTION_NAME_PREFIX>__clientId = <CLIENT_ID>
下一步
請參閱下列相關文章: