【发布时间】:2015-11-30 08:15:55
【问题描述】:
我有一个 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,但这不是我想要做的。
另外,为了进行测试,我确实允许 info 端点具有匿名访问权限,但随后它在一堆其他端点上是 403 - 简单地传递这些请求的身份验证详细信息比在我的服务器安全。
任何帮助表示赞赏。
干杯
【问题讨论】:
标签: spring rest model-view-controller websocket sockjs