在建立连接之前使用后备传输进行 Socket.IO 身份验证
Posted
技术标签:
【中文标题】在建立连接之前使用后备传输进行 Socket.IO 身份验证【英文标题】:Socket.IO Authentication with fallback transports before establishing a connection 【发布时间】:2012-10-30 08:59:09 【问题描述】:使用需要广泛浏览器兼容性的 Node.js/Socket.IO 开发应用程序,因此预计客户端的浏览器可能不支持 WebSocket。我想知道无论底层传输如何,对用户进行身份验证的最可靠方法是什么。
有许多示例在连接/握手时发送带有 sessionID 的 cookie,这是理想的,但我担心这不适用于 Flash 套接字,因为发送的 cookie 不同。
另一种方法是让客户端在用户进行身份验证时存储 SessionID,然后当用户需要 Socket 连接时,您将会话 ID 作为第一条消息发送。这种方法的问题是您会产生建立完整连接的开销,这从负载或安全角度来看并不理想。
在连接/握手阶段(即不通过连接的套接字发送令牌)使用 Socket.IO 的最佳身份验证模式是什么,无论客户端和服务器之间使用什么底层传输机制?
【问题讨论】:
【参考方案1】:我的想法是,您无法避免在打开的套接字上发送身份验证。您需要将该套接字链接到您内部拥有的东西,即使您将套接字的使用限制在应用程序的实时方面,除非您提供只读的公共流。
您可以通过另一种机制(例如 Express/Redis)进行身份验证来减少连接开销,并且仅在授权有效时指示客户端打开套接字连接(通过套接字发送会话 ID 作为第一次通信)。您必须在客户端代码中手动执行此操作;没错,cookie 不会通过 Socket.IO 连接自动发送。您可以立即断开传递无效会话 ID 的套接字或发送没有会话 ID 的请求,并且如果您担心 DoS 攻击,则对这些连接有更严格的超时。有关如何实现此功能的示例代码,请参阅Socket.IO Authentication。
【讨论】:
以上是关于在建立连接之前使用后备传输进行 Socket.IO 身份验证的主要内容,如果未能解决你的问题,请参考以下文章
socket.io 错误 - Web 套接字连接在建立连接之前关闭
socket.io 错误 - Web 套接字连接在建立连接之前关闭
如何使用 socket.io-p2p 在房间内建立对等连接?