使用基于令牌的身份验证(JWT)的Spring websockets(sockJS + Stomp)的最佳方法

问题描述 投票:2回答:1

我想在Spring启动应用程序中使用websockets(sockJS with Stomp),该应用程序通过Json Web Token(JWT)进行基于令牌的身份验证。在服务器上有一个验证JWT令牌的过滤器。此令牌发送请求头但SockJS客户端api不支持头。这意味着,当SockJS客户端API尝试与服务器进行websocket握手时,例如:

new SockJS("http://localhost:8080/websocket")

HTTP请求将被JWT授权过滤器截获,并且握手将失败,因为请求中没有标头,因此过滤器将拒绝请求。我已经看到在论坛中提出了几种解决方法,但它们似乎都不适合这种情况:

  • HandshakeInterceptor:此解决方案不起作用,因为过滤器总是在拦截器之前执行。
  • 在STOMP标头上发送身份验证标头也不起作用,因为握手后STOMP连接自然会发生。

我发现here可以通过查询参数在SockJS握手URL上发送令牌,我必须更改身份验证过滤器以查找查询参数,而不仅仅是标题。出于安全原因,我不太喜欢在查询参数上发送令牌的解决方案。有更好的选择还是这是最好的方法?

java spring websocket jwt sockjs
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.