Socket.io: 用户是否可以更改收听频道?

Socket.io: Is it possible for a user to alter the listening channel?

所以我开始使用 Redis 和 Socket.io 向客户端广播事件。我在后端使用 Laravel,并将利用它们的事件功能。

根据用户的访问级别,我只希望他们收听某些频道。我想我可以动态设置他们将收听的频道,但我担心他们是否可以使用调试工具或排序来更改他们正在收听的频道。

例如,也许页面会在 'channel-100' 上加载监听,但是他们可以更改代码以便它可以监听任何其他频道,例如 'channel-110' 吗?

我不确定我能否具体帮助 Socket.io,但我可以告诉您我们是如何在实时系统中解决这个问题的,这可能适用于您的问题。

客户端可以请求附加到频道,因此这与您的建议相反,即客户端决定他们收听什么,服务器不决定。参见 how channels attach.

现在,为了解决您对哪些客户端可以访问哪些频道的担忧,您的 Laravel 应用程序应该发布一个令牌,指定它拥有哪些权限。由于您的 Laravel 应用程序负责身份管理并知道用户是谁,因此最好随时掌握最新信息。因此,您的客户端应该从您的 Laravel 应用程序请求一个令牌,该令牌将传递到您的 Socket.io 服务器,然后应用规则来允许/禁止请求加入这些频道。这样您的 Socket.io 服务器就不需要从您的系统中嵌入任何业务逻辑,并且在您的应用程序中发行令牌很容易。

参见how we made token authentication can work with your app

我知道这不是一个直接的答案,但我希望它能帮助您从架构上思考它。

Matt,联合创始人,Ably: simply better realtime