我们目前有一个 Spring 应用程序,其中包含 REST API 和 Websocket 代理端点,用于获取数据库更改的实时更新。
我们已经成功迁移到带有嵌入式 Redis 服务器的 Spring Session 项目,该服务器通过基本身份验证进行身份验证,并且 session ID 可以在后续请求中用作 x-auth-token header 。
我们遇到的问题是保护 Websocket。在 Angular 上,我们在 stomp.js/sockjs 库周围有一个包装器指令,但我们似乎无法弄清楚如何在 Websocket 升级请求上设置 x-auth-token header 。
我们做错了什么吗?实现这种安全方案的推荐方法是什么?
堆栈:
- Tomcat 7.0.57
- Spring 安全 4.0.0.RC2
- Spring session 1.0.0.RELEASE
- Spring MVC 4.1.4
- AngularJS 1.2.28
最佳答案
看起来 JS Websocket API 不允许在初始握手和升级请求上设置 HTTP header 。
正确的方案是在 CONNECT 帧上发送身份验证 token 并在服务器端进行相应处理。因此,现在我们已经迁移到浏览器 cookie session ,直到我们可以在服务器端找到合适的实现。
关于java - Spring Session、Websocket、REST token 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173749/