繁体   English   中英

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

[英]Best approach to use Spring websockets (sockJS + Stomp) with token based authentication (JWT)

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

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

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

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

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

HandshakeInterceptor:此解决方案不起作用,因为过滤器始终在拦截器之前执行。

这是我使用与您完全相同的设置所做的。

您需要将websocket endpoint添加到

@Override public void configure(WebSecurity registry)

喜欢

registry.ignoring().antMatchers("/websocket/**");

这将告诉Spring安全性不会触发套接字端点,因此会为jwt设置过滤器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM