使用需要广泛浏览器兼容性的Node.js / Socket.IO处理应用程序,因此预计客户端可能不会在其浏览器中支持WebSocket。我想知道什么是最有效的方式来验证用户,无论底层传输。
有很多例子在连接/握手上发送带有sessionID的cookie是理想的但是我担心这不会与Flash套接字一起使用,因为发送的cookie是不同的。
另一种方法是让客户端在用户进行身份验证时存储SessionID,然后当用户需要Socket连接时,您将会话ID作为第一条消息发送。这种方法的问题是,从负载或安全角度来看,建立完整连接的开销是不理想的。
在连接/握手阶段使用Socket.IO的最佳身份验证模式是什么(即不通过连接的套接字发送令牌),无论客户端和服务器之间使用什么底层传输机制。服务器
答案 0 :(得分:0)
我的想法是你无法避免在开放的套接字上发送身份验证。您将需要将该套接字链接到您内部的内容,即使您将套接字的使用限制在应用程序的实时方面,除非您提供只读的公共流式传输。
如果授权有效,您可以通过另一种机制(例如Express / Redis)进行身份验证来减少连接开销,并且只指示客户端打开套接字连接(通过套接字发送会话ID作为第一次通信)。您必须在客户端代码中手动执行此操作;你是对的,不会通过Socket.IO连接自动发送cookie。您可以立即断开传递无效会话ID的套接字或发送没有会话ID的请求,并且如果您担心DoS攻击,则对这些连接具有更严格的超时。有关如何实现此功能的示例代码,请参阅Socket.IO Authentication。