使用 Microsoft Entra 應用程式授權對 Azure SignalR Service 資源的要求
Azure SignalR Service 支援 Microsoft Entra ID 從 Microsoft Entra 應用程式授權要求。
本文說明如何設定您的 Azure SignalR Service 資源和程式碼,以從 Microsoft Entra 應用程式授權資源的要求。
註冊應用程式
第一個步驟是註冊 Microsoft Entra 應用程式:
在 Azure 入口網站上,搜尋並選取 [Microsoft Entra ID]。
選取管理下的應用程式註冊。
選取新增註冊。 [註冊應用程式] 窗格隨即開啟。
針對 [名稱],輸入應用程式的顯示名稱。
選取 [註冊] 以確認註冊。
註冊應用程式之後,您可以在應用程式的概觀頁面上找到 [應用程式 (用戶端) 識別碼] 和 [目錄 (租用戶) 識別碼]。 這些 GUID 在下列步驟中很有用。
若深入了解註冊應用程式,請參閱快速入門:使用 Microsoft 身分識別平台註冊應用程式。
新增認證
您可以將憑證和用戶端密碼 (為字串) 當作認證新增至您的機密用戶端應用程式註冊。
用戶端密碼
應用程式在要求權杖時,需要用戶端密碼來證明其身分識別。 若要建立用戶端密碼,請遵循下列步驟:
在 [管理] 下,選取 [憑證和密碼]。
在 [用戶端密碼] 索引標籤中,選取 [新增用戶端密碼]。
輸入用戶端密碼的描述,然後選擇到期時間。
複製用戶端密碼的值,然後貼到安全的位置。
注意
密碼只會顯示一次。
憑證
您可以上傳認證,而不是建立用戶端密碼。
若要深入了解新增認證,請參閱新增認證。
在 Azure 入口網站上新增角色指派
下列步驟說明如何透過 Azure SignalR Service 資源,將 SignalR App Server 角色指派給服務主體 (應用程式)。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
注意
角色可以指派給任何範圍,包括管理群組、訂閱、資源群組或單一資源。 如需範圍的詳細資訊,請參閱了解 Azure RBAC 的範圍。
在 Azure 入口網站中,移至您的 Azure SignalR Service 資源。
選取 [存取控制 (IAM)]。
選取 [新增>][新增角色指派]。
在 [角色] 索引標籤上,選取 [SignalR App Server]。
在 [成員] 索引標籤上,選取 [使用者、群組或服務主體],然後選擇 [選取成員]。
搜尋並選取您要指派角色的應用程式。
在 [檢閱 + 指派] 索引標籤上,選取 [檢閱 + 指派] 以指派角色。
重要
Azure 角色指派最多需要 30 分鐘的時間來傳播。
若要進一步了解如何指派和管理 Azure 角色,請參閱以下文章:
- 使用 Azure 入口網站指派 Azure 角色
- 使用 REST API 指派 Azure 角色
- 使用 Azure PowerShell 指派 Azure 角色
- 使用 Azure CLI 指派 Azure 角色
- 使用 Azure Resource Manager 範本指派 Azure 角色
設定您的應用程式
應用程式伺服器
最佳做法是在環境變數中設定身分識別和認證:
變數 | 描述 |
---|---|
AZURE_TENANT_ID |
Microsoft Entra ID。 |
AZURE_CLIENT_ID |
租用戶中應用程式註冊的用戶端 (應用程式) 識別碼。 |
AZURE_CLIENT_SECRET |
為應用程式註冊產生的用戶端密碼。 |
AZURE_CLIENT_CERTIFICATE_PATH |
PEM 或 PFX 格式的憑證路徑和私密金鑰組,可驗證應用程式註冊。 |
AZURE_USERNAME |
Microsoft Entra 使用者帳戶的使用者名稱,也稱為使用者主體名稱 (UPN)。 |
AZURE_PASSWORD |
Microsoft Entra 使用者帳戶的密碼。 已啟用多重要素驗證的帳戶不支援密碼。 |
您可以使用 DefaultAzureCredential 或 EnvironmentCredential 來設定 Azure SignalR Service 端點。 DefaultAzureCredential
的程式碼如下:
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(new Uri("https://<resource-name>.service.signalr.net"), new DefaultAzureCredential())
};
});
EnvironmentCredential
的程式碼如下:
services.AddSignalR().AddAzureSignalR(option =>
{
option.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(new Uri("https://<resource-name>.service.signalr.net"), new EnvironmentCredential())
};
});
若要了解 DefaultAzureCredential
的運作方式,請參閱 DefaultAzureCredential 類別。
使用端點特定的認證
在您的組織中,您可能要針對不同端點使用不同的認證。
在此案例中,您可以使用 ClientSecretCredential 或 ClientCertificateCredential:
services.AddSignalR().AddAzureSignalR(option =>
{
var credential1 = new ClientSecretCredential("tenantId", "clientId", "clientSecret");
var credential2 = new ClientCertificateCredential("tenantId", "clientId", "pathToCert");
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 來設定 Microsoft Entra 應用程式身分識別,以存取您的 Azure SignalR Service 資源。
您必須先指定 Azure SignalR Service 的服務 URI。 服務 URI 的金鑰為 serviceUri
。 開頭為連線名稱前置詞 (預設為 AzureSignalRConnectionString
) 和分隔符號。 分隔符號在 Azure 入口網站中為底線 (__
),在 local.settings.json 檔案中為冒號 (:
)。 您可以使用繫結屬性 ConnectionStringSetting
以自訂連線名稱。 繼續閱讀以尋找範例。
然後,您可以選擇在預先定義的環境變數還是在 SignalR 指定的變數中設定 Microsoft Entra 應用程式身分識別。
設定預先定義環境變數中的身分識別
如需預先定義的環境變數清單,請參閱環境變數。 當您有多個服務時,建議您使用相同的應用程式身分識別,因此您不需要針對每個服務設定身分識別。 其他服務也可能根據這些服務的設定使用這些環境變數。
例如,若要使用用戶端密碼認證,請在 local.settings.json 檔案中設定身分識別,如下所示:
{
"Values": {
"<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
"AZURE_CLIENT_ID": "...",
"AZURE_CLIENT_SECRET": "...",
"AZURE_TENANT_ID": "..."
}
}
在 Azure 入口網站中,新增設定,如下所示:
<CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
AZURE_CLIENT_ID = ...
AZURE_TENANT_ID = ...
AZURE_CLIENT_SECRET = ...
在 SignalR 指定的變數中設定身分識別
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 入口網站中,新增設定,如下所示:
<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__clientId = ...
<CONNECTION_NAME_PREFIX>__clientSecret = ...
<CONNECTION_NAME_PREFIX>__tenantId = ...
下一步
請參閱下列相關文章: