如何限制对Websockets的访问?

时间:2016-02-01 17:56:10

标签: websocket

我正在试图弄清楚Websockets是如何工作的。我阅读了一些文章,教程等,我对它的工作方式有了非常基本的了解,但是有一个我无法理解如何实现的元素。

我的想法如下:一个用户将加载一个“客户”页面,其中包含该客户的所有信息+讨论主题。如果其他用户加载了同一页面,他们将能够实时讨论,如果一个用户更新了客户的数据,第二个用户将看到更新。

困扰我的是,我如何允许用户访问客户数据,但通过检查他们是否可以访问它(例如,用户可以访问其组的客户,而不是所有客户)

我如何确定当前用户将访问他有权使用的客户(在websocket中)?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

将websocket连接本身视为一个单独的东西。客户端使用的套接字可以订阅许多不同的事件。

您所描述的是主题。建立websocket连接后,您使用您用于订阅主题的任何套接字框架发送消息。例如,它可能是一个名为customer-123的主题。 (一个主题的类比,是一个聊天室)

您的应用程序逻辑(服务器端)将验证当前登录的用户是否有权访问客户123,如果是,则允许他们加入此主题。如果您不这样做,那么用户收听与任何数据相关的任何消息都是微不足道的。

每当用户更新与客户123相关的任何数据时,都会向该主题发布一条消息。因此,该主题中的任何用户都将收到该消息。

套接字可能会为他们在您的应用中打开的每个客户订阅许多主题。根据您希望如何发送消息,可以组合和管理主题。

在一个典型的大型应用程序中,默认情况下,websocket订阅了诸如user-123,team-456之类的主题是很常见的,因此服务器可以单独向他们发送消息,也可以向整个团队发送消息。 。的成员。

例如,如果用户更新了customer-123,我可能会将完整的数据对象发送到customer-123主题,如果客户123属于team-456,我还会发送一个小的通知对象,如&#39 ;用户789已更新客户123'对整个团队而言(这就是Facebook以系统的形式提供的功能)。

随着您的应用程序的增长,您将使用通知中心等服务来管理可能存在数千个主题的事实,每个主题都有数千个订阅者。

答案 1 :(得分:0)

要做的最好的事情是共享会话ID并在Web应用程序和套接字会话之间设置身份验证令牌策略。您可以设置自己的策略中间件来检查会话ID。

你并不清楚你是如何努力实现这一目标的。如果您使用的是express / socket.io,则可以使用此模块:https://www.npmjs.com/package/express-socket.io-session

希望这有帮助!

答案 2 :(得分:0)

与任何其他生产应用程序一样,您需要身份验证(允许谁使用该应用程序)和授权(经过身份验证的用户可以执行哪些功能)。授权(即访问控制 - ACL)可能更准确地说是您正在寻找的。您的应用必须咨询授权子系统,以查看当前用户是否具有编辑/查看其他用户信息的访问权限。

对于许多应用来说,是一个微不足道的问题;安全性和隐私性是任何基于Web的(分布式)应用程序的重要方面。