2011-05-29 33 views
12

我運行的WebSocket服務器,並問自己,如果它的刨光,客戶端身份驗證將在未來的握手來完成...草案也許XXXX :)的WebSocket認證

你有沒有信息?我聽說用draft07會話ID可以發送到服務器,所以也許這可以幫助驗證客戶端...

我在做atm是等待最多10秒,直到客戶端發送我帶有登錄標題,用戶名和密碼的消息。但我認爲這不是「解決方案」。你們在那裏做得如何?

回答

9

WebSockets協議允許在握手期間交換標準的HTTP驗證頭。如果您有一個WebSocket服務器作爲模塊插入現有的Web服務器,那麼Web服務器中的現有認證應該已經可以工作。否則,如果你有一個獨立的WebSockets服務器,那麼你可能需要添加認證支持。

更新

正如@喬恩指出,不同於普通的HTTP/XHR請求,瀏覽器API不允許您爲WebSocket連接任意設置「X- *」的標題。您可以設置的唯一標頭值是協議。這很不幸。一種常見的解決方案是使用基於票據的系統,該系統依賴於現有的HTTP機制進行授權/驗證,然後將該票據與websocket連接一起傳遞並進行驗證:https://devcenter.heroku.com/articles/websocket-security

+0

它可能是WebSocket規範的一部分,但它在大多數瀏覽器中都不是WebSocket API的一部分。您無法在瀏覽器中隨WebSocket握手一起發送自定義標頭。請參閱https://github.com/SocketCluster/socketcluster-client/issues/9 – Jon 2016-02-04 03:50:58

+0

_「,與通常的HTTP/XHR請求不同,您不能爲WebSocket連接設置任意的」X- *「標頭。」_ - 實際上@Jon指出你不能通過** WebSocket JS API **來做到這一點。這與說* WebSocket連接*無法完成是不一樣的。 – Madbreaks 2016-03-28 21:35:22

+1

@破解好點。我已經闡明瞭這是一個WebSocket瀏覽器API,而不是WebSocket協議的限制。此外,還有一些Node.js/JS WebSocket實現允許您設置標題。所以真的只是W3C瀏覽器API不提供機制。 – kanaka 2016-03-29 16:36:09