SignalR 组安全注意事项

SignalR group security considerations

希望你能帮助解决这个问题。我们有一个基于浏览器的支持应用程序,它使用 SignalR 进行客户聊天。该解决方案包含两个网络应用程序:admin.[domain].comsupport.[domain].com。两者都是 C# ASP.NET CORE 3.1 MVC 应用程序。

支持工程师使用管理应用程序来处理聊天。 SignalR 中心托管在管理应用程序中。管理应用程序使用 ASP.NET 核心身份进行身份验证和授权。

但是,支持应用程序没有身份机制 - 我们需要一个“低摩擦”解决方案,用户只需连接到 support.domain.com/{GUID},不需要密码。 GUID 是由支持工程师预先生成的 SignalR 组名称。到达这条路线后,支持应用会调用 AddToGroup(GUID).

SignalR 文档指出组不是一种有效的安全机制。但是,如果组名是 GUID 并且我们从不发送给所有客户端,那么这是一种相当安全的方法吗?

消息只能在群组内发送或接收。 GUID 使组名非常安全,我想。

如果群组名称是未知的GUID,是否可以轻易窃听聊天记录?是否有此方法的 better/more 安全替代方法,无需客户端输入密码?

如您所说,groups are not a security mechanism。但在你的情况下,你想做的是好的,因为只要用户连接到集线器,并且组管理由管理员进行,在聊天会话后管理员可以删除组,这样用户就不能稍后加入。

您需要明确表示这是一个 public 会话,就像您在白板等应用程序中看到的那样,用户可以在收到邀请后加入 link。

我还建议实施一些 ttl 机制,让群组在一段时间后过期,以免用户稍后加入会话。

最后,做一些防御性的编码,比如每个组一次只允许 1 位管理员和 1 位用户,等等...