2013-12-10 33 views
3

我想使用Web套接字創建一個簡單的CRUD應用程序,並在Glassfish 4上運行Java EE 7 Websocket服務器,並與單個頁面網站進行通信。我的問題是:我如何保護我的應用程序?換句話說:我如何執行用戶身份驗證和授權?因爲只有在請求用戶的身份驗證和授權之後,我才希望服務器回覆一些消息。最後但並非最不重要的是:我如何提供「記住我」功能?謝謝。如何在Java EE 7中保護Websocket服務器

回答

4

一個實用的方法是讓用戶通過您的Web頁面登錄,成功驗證後從您的Web應用程序設置一個cookie,並在WebSocket服務器上檢查來自頁面的傳入WebSocket連接中的Cookie。

這將需要Web頁面和WebSocket來自同一個來源(否則瀏覽器將不會在WebSocket連接上發送cookie)。

另一種可能性是通過WebSocket連接上的消息實現自定義認證機制。

另一種可能性是使用基於TLS和基於客戶端證書的身份驗證。

請注意,雖然WebSocket具有基於HTTP的初始打開握手,並且原則上可以使用任何HTTP身份驗證機制,但實際上有一些限制。例如。使用HTTP基本身份驗證,瀏覽器將爲純HTML頁面請求呈現登錄對話框,但不會爲所謂的子資源(如圖像請求和WebSocket(也可視爲子資源))提供登錄對話框。

+1

謝謝你的友好和詳盡的答案。我想我更喜歡基於cookie的解決方案。無論如何,你會在cookie中放什麼?存儲在服務器上的隨機ID以及與用戶關聯的隨機ID?你知道這個解決方案的例子嗎? –

+1

如果用於身份驗證目的,cookie可能是一個隨機字符串。請注意,您希望一般情況下運行TLS(因爲否則Cookie可能會被中間對手的人嗅探)。是的,那麼你可以將後端的用戶信息與該cookie值相關聯。如果你想在cookie中存儲信息(我不會推薦一般),那麼你可能想要的cookie值不僅是「普通」的數據,但加密簽名。否則,任何人都可以注入並非由您創建的數據(攻擊向量)。 – oberstet

+0

非常感謝你,我很感謝你的好意! –