使用 SockJS 提供 auth 标头

2024-01-05

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

当用户登录时,我返回一个 X-AUTH-TOKEN 标头,其中包含 JWT 令牌。然后,此令牌会在每次向服务器发出请求时在同一标头中传递。这对于 REST 端点来说一切正常,但我不知道如何在 Websocket 上执行此操作。

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

var socket = new SockJS('/socket/updates', null, {});

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

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

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

另外,为了进行测试,我确实允许信息端点进行匿名访问,但随后它在许多其他端点上出现 403 - 简单地传递这些请求的身份验证详细信息比在我的服务器安全性中戳漏洞更优雅。

任何帮助表示赞赏。

Cheers


您无法从 SockJS 设置标头。并不是因为SockJS没有这个功能,而是因为浏览器制造商没有向Javascript公开这个API。看:

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

有关解决方法,请参阅JSON Web Token (JWT) 与基于 Spring 的 SockJS / STOMP Web Socket https://stackoverflow.com/questions/30887788/json-web-token-jwt-with-spring-based-sockjs-stomp-web-socket.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SockJS 提供 auth 标头 的相关文章

随机推荐