Как совместить Spring Security и js sockjs-client

Я хочу создать Spring Server и клиент javascript Broswer, подключающийся через sockjs-client. Соединение должно быть защищено с помощью Spring Security.

У меня следующая дилемма:

  1. Spring Security, похоже, предполагает, что рукопожатие веб-сокета происходит через аутентифицированный http-сеанс (например, набор файлов cookie JSESSIONID, вход в систему).

  2. sockjs-client, однако, похоже, накладывает на разработчиков ограничение, заключающееся в том, что никакой аутентифицированный http-сеанс не должен использоваться (см. https://github.com/sockjs/sockjs-client/issues/196).), применяя это любым возможным способом.

Верна ли моя оценка дилеммы, и есть ли какое-либо очевидное решение для реализации безопасности на сервере spring с веб-сокетами, чтобы sockjs-client мог безопасно подключаться?

Предлагаемое решение передачи любого токена аутентификации в запросе GET /info похоже на хаки, чтобы обойти ограничения безопасности SockJS, если они используются для создания аутентифицированного HttpSession.

Это, по-видимому, является причиной проблем для нескольких людей, таких как:

Я вижу 3 альтернативных пути:

  1. Не используйте SockJ, а только собственные веб-сокеты.
  2. использовать SockJS поверх аутентифицированного Http-сеанса через токен query-param и пожертвовать некоторой безопасностью
  3. Подключиться через неаутентифицированное http-соединение и реализовать пользовательскую обработку аутентификации для spring-websockets (возможно, на основе весеннего сеанса)

person tkruse    schedule 29.07.2016    source источник