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

授权使用 Microsoft Entra ID 访问 Azure SignalR 服务

Azure SignalR 服务支持 Microsoft Entra ID,以授权对其资源的请求。 使用 Microsoft Entra ID,可以使用基于角色的访问控制(RBAC)向 安全主体授予权限。 安全主体是用户/资源组、应用程序或服务主体,例如系统分配的标识和用户分配的标识。

Microsoft Entra ID 对安全主体进行身份验证,并返回 OAuth 2.0 令牌。 然后,该令牌用于授权针对Azure SignalR 服务资源的请求。

与访问密钥授权相比,使用 Microsoft Entra ID 对Azure SignalR 服务授权授权的请求提供了更高的安全性和易用性。 强烈建议尽可能使用 Microsoft Entra ID 进行授权,因为它可确保具有最低所需权限的访问。

重要

禁用本地身份验证可能会产生以下后果:

  • 当前访问密钥集将永久删除。
  • 使用当前访问密钥集签名的令牌将不可用。

Microsoft Entra ID 概述

当安全主体尝试访问Azure SignalR 服务资源时,必须授权请求。 使用 Microsoft Entra ID 获取对资源的访问权限需要两个步骤:

  1. Microsoft Entra ID 对安全主体进行身份验证,然后返回 OAuth 2.0 令牌。
  2. 令牌作为请求的一部分传递给Azure SignalR 服务资源,以授权请求。

使用 Microsoft Entra ID 进行客户端身份验证

使用访问密钥时,密钥在应用服务器(或函数应用)与Azure SignalR 服务资源之间共享。 Azure SignalR 服务使用共享密钥对客户端连接请求进行身份验证。

使用 Microsoft Entra ID 时,没有共享密钥。 相反,Azure SignalR 服务使用临时访问密钥对客户端连接中使用的令牌进行签名。 工作流包含四个步骤:

  1. 安全主体会要求 Microsoft Entra ID 提供 OAuth 2.0 令牌来对其自身进行身份验证。
  2. 安全主体调用 SignalR 身份验证 API 以获取临时访问密钥。
  3. 安全主体在协商期间使用临时访问密钥为客户端连接进行客户端令牌签名。
  4. 客户端使用客户端令牌连接到Azure SignalR 服务资源。

临时访问密钥将在 90 分钟内过期。 我们建议你得到一个新的,并轮换旧一小时一次。

工作流内置于适用于应用服务器的 Azure SignalR 服务 SDK 中。

分配 Azure 角色以授予访问权限

Microsoft Entra ID 通过 Azure RBAC 授权访问受保护资源的权限。 Azure SignalR 服务定义一组 Azure 内置角色,这些角色包含用于访问Azure SignalR 服务资源的常见权限集。 还可以定义用于访问Azure SignalR 服务资源的自定义角色。

资源范围

在将任何 Azure RBAC 角色分配给安全主体之前,可能需要确定安全主体应具有的访问范围。 建议仅授予尽可能窄的范围。 在较广范围内中定义的 Azure RBAC 角色由其下的资源继承。

可以在以下级别限定对Azure SignalR 服务资源的访问范围,从最窄的范围开始。

范围 说明
单个资源 仅适用于目标资源。
资源组 适用于资源组中的所有资源。
订阅 列出订阅中的所有资源。
管理组 适用于管理组中包含的订阅中的所有资源。

用于Azure SignalR 服务资源的 Azure 内置角色

角色 说明 用例
SignalR 应用服务器 访问 WebSocket 连接创建 API 和身份验证 API。 最常用于应用服务器。
SignalR 服务所有者 对所有数据平面 API(包括 REST API、WebSocket 连接创建 API 和身份验证 API)的完全访问权限。 用于 使用 Microsoft Entra ID 进行授权的无服务器模式 ,因为它需要 REST API 权限和身份验证 API 权限。
SignalR REST API 所有者 对数据平面 REST API 的完全访问。 通常用于编写用于管理连接和组的工具,但不进行连接或调用身份验证 API。
SignalR REST API 读者 对数据平面 REST API 的只读访问。 通常用于编写仅调用Azure SignalR 服务数据平面只读 REST API 的监视工具。

后续步骤