如何结合 Spring Security 和 js sockjs-client

tkr*_*use 5 java spring spring-security sockjs spring-websocket

我想创建一个 Spring Server 和一个通过 sockjs-client 连接的 Broswer javascript 客户端。连接应该通过 Spring Security 来保护。

我有以下困境:

  1. Spring Security 似乎假设 websocket 握手是通过经过身份验证的 http 会话发生的(例如 JSESSIONID cookie 设置,登录发生)。

  2. 然而,sockjs-client 似乎对开发人员施加了限制,即不得使用经过身份验证的 http 会话(参见https://github.com/sockjs/sockjs-client/issues/196),以任何方式强制执行此操作。

我对困境的评估是否正确,是否有任何明显的解决方案来实现带有 websockets 的 spring 服务器的安全性,以便 sockjs-client 可以安全地连接?

如果用于创建经过身份验证的 HttpSession,在 GET /info 请求中传递任何身份验证令牌的建议解决方案似乎是绕过 SockJS 安全限制的黑客。

这似乎是一些人出现问题的基础,例如:

我看到了 3 种替代方法:

  1. 不要使用 SockJs,而只使用原生 Websockets
  2. 通过查询参数令牌在经过身份验证的 Http 会话上使用 SockJS,并牺牲一些安全性
  3. 通过未经身份验证的 http 连接进行连接并为 spring-websockets 实现自定义身份验证处理(可能基于 spring 会话)

归档时间:

查看次数:

1109 次

最近记录:

8 年,1 月 前