我可以阻止其他呼叫者拦截同一集线器上的SignalR Hub消息吗?

时间:2015-02-07 14:21:45

标签: signalr signalr-hub

SignalR服务器中心不保留组列表,因此我假设当我向组发送广播消息时,它会发送给连接到集线器的所有人,客户端会根据其参与组过滤掉该消息。如果我向特定组发送消息,它似乎会被发送给每个人,并且可以被不在指定组中的人拦截,该组知道如何使用浏览器调试器。如果我想要一个安全的广播(甚至不通过网络发送到某些客户端)我假设我需要单独的集线器或者我是否需要单独的子域?

2 个答案:

答案 0 :(得分:0)

单独的集线器听起来不是一个好主意。虽然您可能可以验证连接上的用户并拒绝非授权用户的连接,但如果您需要一种动态创建隔离集线器的方法。但是,如果此功能足够您可以使用Authorize attribute来保护集线器或集线器方法。

对于需要为不同用户组复制相同功能的情况,您可以使用SignalR组,但每次连接时都需要验证用户是否属于该组。 SignalR文档包含有关如何执行此操作的示例verification。请注意,每个人都可以尝试连接到您的组,您应该在连接时进行验证,而不是依赖于您没有为某个客户端调用add方法。

答案 1 :(得分:0)

SignalR仅发送给组中的客户端。这只是一个设计问题,您无法检索组中的连接列表。与SignalR中的其他所有组一样,组是基于订阅的,因此服务器知道哪些连接需要接收消息,但它深埋在内部。

我会指向相关的服务器端代码,但现在没有时间查找它。 在客户端代码中很容易看到,因为它不是很多代码 - 所以你可以验证那里没有过滤。

每个中心也不会分开群组。