【问题标题】:Providing auth header with SockJS使用 SockJS 提供 auth 标头
【发布时间】: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


    【解决方案1】:

    您不能从 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>' }},当我在开发控制台选项卡网络中进行调试时,我看到请求没有授权标头(标头未考虑在内)
    【解决方案2】:

    客户端:

    stompClient.connect({headername:header}, function () {
                    setConnected(true);
                    stompClient.subscribe(request.topic, function (message) {
                        output(message.body);
                    });
                });
    

    服务器端:

    StompHeaderAccessor accessor
                            = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
    
     String headervalue= accessor.getNativeHeader("your header name").get(0);
    

    【讨论】:

    • 这设置了 STOMP 标头,而不是 HTTP 标头,因此它可能是解决方法的一部分,它不能解决无法将自定义 HTTP 标头添加到 SockJS 握手请求的初始问题。
    • 好吧,在没有维护 HttpSession 的情况下(即 http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) 时),看起来这种方法是 Spring 推荐的方法。 github.com/spring-projects/spring-framework/blob/master/src/…
    猜你喜欢
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多