你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

授权使用 Microsoft Entra 托管标识Azure SignalR 服务资源的请求

Azure SignalR 服务支持使用 Microsoft Entra ID 为来自Microsoft Entra 托管标识的请求授权。

本文介绍如何配置Azure SignalR 服务资源和代码,以授权从托管标识向资源发出的请求。

配置托管标识

第一步是配置托管标识。

此示例演示如何使用Azure 门户在虚拟机(VM)上配置系统分配的托管标识:

  1. Azure 门户中,搜索并选择 VM。

  2. 在“设置”下选择“标识”。

  3. 在“系统分配”选项卡中,将“状态”切换为“启用” 。

    Screenshot of selections for turning on system-assigned managed identities for a virtual machine.

  4. 选择“保存”按钮以确认更改。

若要了解如何创建用户分配的托管标识,请参阅 创建用户分配的托管标识

若要详细了解如何配置托管标识,请参阅以下文章之一:

若要了解如何为 Azure App 服务 和 Azure Functions 配置托管标识,请参阅如何对 App 服务 和 Azure Functions 使用托管标识。

在Azure 门户中添加角色分配

以下步骤介绍如何通过Azure SignalR 服务资源将 SignalR 应用服务器角色分配给系统分配的标识。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

注意

可以将角色分配给任何范围,包括管理组、订阅、资源组或单个资源。 若要了解有关范围的详细信息,请参阅 了解 Azure RBAC 的范围。

  1. Azure 门户中,转到Azure SignalR 服务资源。

  2. 选择“访问控制 (IAM)”。

  3. 选择“添加”>“添加角色分配”。

    Screenshot that shows the page for access control and selections for adding a role assignment.

  4. 在“角色”选项卡上,选择“SignalR 应用服务器”。

  5. “成员 ”选项卡上,选择“ 托管标识”,然后选择“ 选择成员”。

  6. 选择 Azure 订阅。

  7. 选择 系统分配的托管标识,搜索要向其分配角色的虚拟机,然后选择它。

  8. 在“查看 + 分配”选项卡上,选择“查看 + 分配”,以分配角色 。

重要

Azure 角色分配可能需要长达 30 分钟才能传播。

若要详细了解如何分配和管理 Azure 角色,请参阅以下文章:

配置应用程序

应用服务器

使用系统分配的标识

可以使用 DefaultAzureCredentialManagedIdentityCredential 来配置Azure SignalR 服务终结点。 最佳做法是直接使用 ManagedIdentityCredential

系统分配的托管标识默认使用,但请确保不要配置 EnvironmentCredential 保留的任何环境变量(如果使用DefaultAzureCredential)。 否则,Azure SignalR 服务回退以用于EnvironmentCredential发出请求,这通常会导致Unauthorized响应。

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

使用用户分配的标识

在创建 ManagedIdentityCredential 对象时提供 ClientId

重要

使用客户端 ID,而不是对象(主体)ID,即使它们都是 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 服务绑定

azure Functions 中的Azure SignalR 服务绑定在本地使用门户或 local.settings.json 中的应用程序设置来配置托管标识以访问Azure SignalR 服务资源。

可能需要一组键/值对来配置标识。 所有键/值对的键必须以 连接名称前缀 (默认为 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

使用用户分配的标识

如果要使用用户分配的标识,则除了具有连接名称前缀外,还需要分配 clientIdserviceUricredential 密钥。 下面是应用程序设置的示例:

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

后续步骤

请参阅以下相关文章: