【问题标题】:Socket.IO Authentication with fallback transports before establishing a connection在建立连接之前使用后备传输进行 Socket.IO 身份验证
【发布时间】:2012-10-30 08:59:09
【问题描述】:

使用需要广泛浏览器兼容性的 Node.js/Socket.IO 开发应用程序,因此预计客户端的浏览器可能不支持 WebSocket。我想知道无论底层传输如何,对用户进行身份验证的最可靠方法是什么。

有许多示例在连接/握手时发送带有 sessionID 的 cookie,这是理想的,但我担心这不适用于 Flash 套接字,因为发送的 cookie 不同。

另一种方法是让客户端在用户进行身份验证时存储 SessionID,然后当用户需要 Socket 连接时,您将会话 ID 作为第一条消息发送。这种方法的问题是您会产生建立完整连接的开销,这从负载或安全角度来看并不理想。

在连接/握手阶段(即不通过连接的套接字发送令牌)使用 Socket.IO 的最佳身份验证模式是什么,无论客户端和服务器之间使用什么底层传输机制?

【问题讨论】:

    标签: node.js session authentication web-applications socket.io


    【解决方案1】:

    我的想法是,您无法避免在打开的套接字上发送身份验证。您需要将该套接字链接到您内部拥有的东西,即使您将套接字的使用限制在应用程序的实时方面,除非您提供只读的公共流。

    您可以通过另一种机制(例如 Express/Redis)进行身份验证来减少连接开销,并且仅在授权有效时指示客户端打开套接字连接(通过套接字发送会话 ID 作为第一次通信)。您必须在客户端代码中手动执行此操作;没错,cookie 不会通过 Socket.IO 连接自动发送。您可以立即断开传递无效会话 ID 的套接字或发送没有会话 ID 的请求,并且如果您担心 DoS 攻击,则对这些连接有更严格的超时。有关如何实现此功能的示例代码,请参阅Socket.IO Authentication

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 2020-08-19
      • 2018-08-03
      • 2013-11-02
      • 2019-06-10
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多