Azure Web PubSub 服务的应用程序防火墙

应用程序防火墙提供对分布式系统中客户端连接的复杂控制。 在深入了解其功能和设置之前,让我们阐明应用程序防火墙不执行的操作:

  1. 它不能替代身份验证。 防火墙在客户端连接身份验证层后面运行。
  2. 它与网络层访问控制无关。

应用程序防火墙的作用是什么?

应用程序防火墙由各种规则列表组成。 目前有两个规则列表,分别称为“客户端连接计数规则”和“客户端流量控制规则”。 未来的更新将支持更多规则列表来控制连接生存期等方面。

此准则分为三个部分:

  1. 不同应用程序防火墙规则简介。
  2. 使用门户或 Bicep 在 Web PubSub 服务端配置规则的说明。
  3. 在服务器端配置令牌的步骤。

先决条件

客户端连接计数规则

客户端连接计数规则限制并发客户端连接。 当客户端尝试建立新连接时,会按顺序检查规则。 如果违反任何规则,则连接将被拒绝,状态代码为 429。

按用户ID限制规则

此规则限制用户的并发连接数。 例如,如果用户使用不同的设备打开多个浏览器选项卡或登录,则可以使用此规则来限制该用户的并发连接数。

备注

  • UserId 必须存在于访问令牌中,此规则才有效。 请参阅配置访问令牌

基于Jwt签名的限流规则

此规则限制同一令牌的并发连接数,以防止恶意用户重用令牌来建立无限连接,这可能会耗尽连接配额。

备注

  • 默认情况下,不能保证 SDK 生成的令牌每次都不同。 尽管每个令牌都包含时间戳,但如果在数秒内生成大量令牌,则此时间戳可能相同。 为了避免相同令牌,请将一个随机声明插入到令牌声明中。 请参阅配置访问令牌

警告

  • 避免将 maxCount 设置得过于激进。 客户端连接可能会在不完成 TCP 握手的情况下关闭。 SignalR 服务无法立即检测到这些“半关闭”连接。 在出现检测信号故障之前,连接一直处于活动状态。 因此,激进的限制策略可能会意外地限制客户端。 更流畅的方法是为连接数留出一些空间,例如:将 maxCount 加倍。

客户端流量控制规则

客户端流量控制规则限制客户端连接的入站吞吐量。 当客户端尝试发送消息时,系统会按顺序检查这些规则。 在每个聚合窗口中,将聚合消息大小,以针对最大入站消息进行检查。 如果违反任何规则,连接就会断开。

根据用户ID的流量限制规则

此规则限制用户的入站吞吐量。

基于JWT签名的流量限制规则

此规则限制每个令牌的入站吞吐量。

设置应用程序防火墙

若要使用应用程序防火墙,请导航到 Azure 门户上的 Web PubSub“应用程序防火墙”边栏选项卡,然后单击“添加”以添加规则。

在门户中为 Azure Web PubSub 添加应用程序防火墙规则的屏幕截图。

配置访问令牌

仅当访问令牌包含相应的声明时,应用程序防火墙规则才会生效。 如果该连接没有相应的声明,则规则会被跳过。 *userId”和 roles 是 SDK 中目前支持的声明。

下面是一个在访问令牌中添加用户 ID 并插入唯一占位符的示例:

// The GUID role won't have any effect. But it ensures this token's uniqueness when using rule ThrottleByJwtSignatureRule.
var url = service.GetClientAccessUri((userId: "user1" , roles: new string[] {  "webpubsub.joinLeaveGroup.group1", Guid.NewGuid().ToString()});

有关详细信息,请参阅客户谈判