2012-11-10 121 views
1

上如何使用Node.js/Socket.IO,需要廣泛的瀏覽器兼容的應用程序工作之前運輸,所以它的預期客戶可能沒有在其瀏覽器的WebSocket支持。我想知道什麼是最強大的方式來驗證用戶,無論底層交通。Socket.IO認證與回退建立連接

在connect/handshake上有很多例子發送了一個cookie,sessionID是理想的,但我擔心這不會與Flash Sockets一起工作,因爲發送的cookie是不同的。

另一種方法是讓客戶端存儲的SessionID,當用戶進行身份驗證,然後當用戶需要Socket連接您發送會話ID但正如第一條消息。這種方法的問題是你承擔建立一個從負載或安全角度來看不理想的完整連接的開銷。

什麼是在連接/握手階段使用Socket.IO的最佳身份驗證模式(即不通過連接的套接字發送令牌),無論客戶端服務器使用何種底層傳輸機制?

回答

0

我的想法是,你不能避免在一個開放套接字發送認證。即使您將套接字的使用限制在應用程序的實時方面,您將需要將該套接字鏈接到您的內部,除非您提供只讀公共流。

您可以通過其它機制驗證減少連接開銷,說快遞/ Redis的,只有指示客戶端打開一個套接字連接(發送會話ID爲在插座第一通信),如果授權是否有效。您必須在客戶端代碼中手動執行此操作;你是對的,cookie不會通過Socket.IO連接自動發送。您可以立即斷開傳遞無效會話標識的套接字或發送沒有會話標識的請求,並且如果您擔心DoS攻擊,則對於這些連接有更嚴格的超時。有關如何實現此目的的一些示例代碼,請參閱Socket.IO Authentication