2013-12-10 2 views
3

Я хотел бы создать простое приложение CRUD с использованием веб-сокетов с веб-сервером Java EE 7 Websocket Server, работающим на Glassfish 4, общающимся с одним веб-сайтом. Мой вопрос: как я могу защитить свое приложение? Другими словами: как я могу выполнить аутентификацию пользователя и авторизацию? Потому что есть несколько сообщений, на которые я хотел бы, чтобы сервер отвечал только после авторизации и авторизации запрашивающего пользователя. И последнее, но не менее важное: как я могу обеспечить функцию «запомнить меня»? Спасибо.Как защитить сервер Websocket в Java EE 7

ответ

4

Практический метод заключается в том, чтобы пользователь мог войти в систему через вашу веб-страницу, установив файл cookie из вашего веб-приложения при успешной аутентификации и проверить, что cookie на вашем сервере WebSocket на входящем соединении WebSocket со страницы.

Для этого требуется, чтобы веб-страница и WebSocket служили от одного источника (иначе браузер не будет отправлять cookie на соединение WebSocket).

Другая возможность - реализовать механизм аутентификации через сообщения поверх соединения WebSocket.

Другая возможность заключается в использовании аутентификации на основе TLS и на основе сертификата клиента.

Обратите внимание, что хотя WebSocket имеет начальное рукопожатие, основанное на HTTP, и вы можете в принципе использовать любой механизм проверки подлинности HTTP, существуют практические ограничения. Например. с базовой аутентификацией HTTP браузеры будут отображать диалоговые окна входа для простых запросов HTML-страниц, но не для так называемых подресурсов, например запросов на изображения .. и WebSocket (который также считается подресурсами).

+1

Спасибо за ваш добрый и исчерпывающий ответ. Думаю, я предпочитаю решение на основе файлов cookie. Что бы вы вложили в cookie? Случайный идентификатор, хранящийся на сервере, а также связанный с пользователем? Вы знаете какой-нибудь пример этого решения? –

+1

Если используется для аутентификации, cookie может быть случайной строкой. Обратите внимание, что вы хотите запустить TLS вообще (так как в противном случае cookie может быть обнюхано человеком в средних противниках). И да, тогда вы можете связать информацию о пользователе на своем сервере с этим значением cookie. Если вы хотите хранить информацию внутри файла cookie (я бы не рекомендовал вообще), тогда вам может понадобиться значение cookie не только «простых» данных, но и криптографически подписанное. В противном случае любой может ввести данные, которые не были созданы вами (вектор атаки). – oberstet

+0

Еще раз спасибо, я оценил вашу доброту! –

Смежные вопросы