1

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

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

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

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

4

1 回答 1

0

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

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

于 2012-11-10T01:38:19.607 回答