Condividi tramite

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 中。

使用 Microsoft Entra ID 时跨租户访问

在某些情况下,由于安全问题,服务器和 Azure SignalR 资源可能不在同一租户中。

多租户应用程序可在此方案中提供帮助。

如果已注册单租户应用,请参阅 将单租户应用转换为多租户应用。

tenantA 中注册多租户应用程序后,应将其预配为 tenantB 中的企业应用程序。

在 Microsoft Entra ID 中从多租户应用程序创建企业应用程序

您在 tenantA 中注册的应用程序和在 tenantB 中配置的企业应用程序共享相同的应用程序 (客户端) ID。

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

Microsoft Entra ID 通过 Azure RBAC 授权访问受保护的资源。 Azure SignalR 服务定义了一组 Azure 内置角色,它们包含用于访问 Azure SignalR 服务资源的通用权限集。 你也可以定义用于访问 Azure SignalR 服务资源的自定义角色。

资源范围

在将 Azure RBAC 角色分配给安全主体之前,必须定义其应具有的适当访问权限范围。 建议授予最有限的范围,以最大程度地减少不必要的权限。 请记住,在更高或更广泛的范围内分配的 Azure RBAC 角色由嵌套在该范围内的资源自动继承。

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

Scope Description
单个资源 仅适用于目标资源。
资源组 适用于资源组中的所有资源。
Subscription 适用于订阅中的所有资源。
管理组 适用于管理组中包含的订阅中的所有资源。

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

角色 Description 用例
SignalR 应用服务器 访问服务器连接创建和密钥生成 API。 最常用于在 默认 模式下运行具有 Azure SignalR 资源的应用服务器。
SignalR 服务所有者 对所有数据平面 API(包括 REST API、服务器连接创建和密钥/令牌生成 API)的完全访问权限。 对于使用 Azure SignalR 资源协商服务器,在 无服务器 模式下运行,因为它需要 REST API 权限和身份验证 API 权限。
SignalR REST API 所有者 对数据平面 REST API 的完全访问。 若要使用 Azure SignalR 管理 SDK 来管理连接和组,但 不会 建立服务器连接或处理协商请求。
SignalR REST API 读取器 对数据平面 REST API 的只读访问。 在编写调用只读 REST API 的监视工具时使用它。

后续步骤