授权使用 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 的监视工具

后续步骤