使用SockJS提供auth标头

L M*_*ris 9 rest model-view-controller spring websocket sockjs

我有一个Spring MVC服务器,它提供了一堆REST端点以及一个websocket端点.除登录端点之外的所有内容都需要身份验 我正在使用JWT来验证来自客户端的请求.

当用户登录时,我正在返回包含JWT令牌的X-AUTH-TOKEN标头.然后,在每个请求到服务器的同一个头中传递此令牌.这一切都适用于REST端点,但我无法弄清楚如何在websocket上执行此操作.

我正在使用SockJS,当我打开连接时:

var socket = new SockJS('/socket/updates', null, {});
Run Code Online (Sandbox Code Playgroud)

这会导致对/ socket/updates/info?t = xxx的GET请求返回403(因为默认情况下一切都需要auth).

理想情况下,我只是在SockJS发出的任何XHR请求上发送我的X-AUTH-TOKEN标头,但我看不到添加标头查看API的任何方法.

最糟糕的情况我可以改变SockJS这样做,但我想知道这个功能是否被故意遗漏了?我知道SockJS出于安全原因不支持cookie,但这不是我想要做的.

此外,为了进行测试,我确实允许信息端点具有匿名访问权限,但是在其他端点上有403个权限 - 简单地传递这些请求的auth详细信息比在我的服务器安全性中挖洞更为优雅.

任何帮助赞赏.

干杯

Ram*_*man 5

您不能从 SockJS 设置标头。不是因为 SockJS 没有这个功能,而是因为浏览器制造商没有将这个 API 暴露给 Javascript。看:

https://github.com/sockjs/sockjs-client/issues/196

有关解决方法,请参阅JSON Web Token (JWT) with Spring based SockJS / STOMP Web Socket

  • 到目前为止有什么变化吗?2019年现在还有效吗?我尝试过新的 ```SockJS(url, {headers : {Authorization : 'Bearer <TOKEN>' }}``` 并且当我在开发控制台选项卡网络中调试时,我发现该请求没有授权标头(不考虑标头) (5认同)
  • 2022 年可能会有任何变化吗?)) (3认同)