我一直在努力用Spring-Security 正确实现Stomp(websocket)身份验证和授权.对于后代,我会回答我自己的问题,提供指导.
Spring WebSocket文档(用于身份验证)看起来不清楚ATM(恕我直言).我无法理解如何正确处理身份验证和授权.
Principal在控制器可用.我想创建一个 Spring Server 和一个通过 sockjs-client 连接的 Broswer javascript 客户端。连接应该通过 Spring Security 来保护。
我有以下困境:
Spring Security 似乎假设 websocket 握手是通过经过身份验证的 http 会话发生的(例如 JSESSIONID cookie 设置,登录发生)。
然而,sockjs-client 似乎对开发人员施加了限制,即不得使用经过身份验证的 http 会话(参见https://github.com/sockjs/sockjs-client/issues/196),以任何方式强制执行此操作。
我对困境的评估是否正确,是否有任何明显的解决方案来实现带有 websockets 的 spring 服务器的安全性,以便 sockjs-client 可以安全地连接?
如果用于创建经过身份验证的 HttpSession,在 GET /info 请求中传递任何身份验证令牌的建议解决方案似乎是绕过 SockJS 安全限制的黑客。
这似乎是一些人出现问题的基础,例如: