CSRF over WebSockets是如何工作的?我在Connect上发送了一个CSRF令牌作为STOMP头,但是org.springframework.security.messaging.web.csrf.CsrfChannelInterceptor
似乎找不到它。我尝试深入了解源代码,我似乎理解CSRF令牌应该与初始的WebSockets HTTP握手一起提供,然后存储在某种会话或存储库中,在那里它被取出。这项工作似乎是由org.springframework.security.messaging.web.socket.server.CsrfTokenHandshakeInterceptor
完成的。
但是-我的HTTP握手不提供任何CSRF令牌-它与任何其他头一样,如授权-我不能提供任何自定义头与初始握手!发送它作为_csrf查询参数也没有帮助。这是一个GET请求,并不需要CSRF默认无论如何。
CSRF应该如何与HTTP上的WebSocket STOMP一起工作?
处理x1c 0d1x时在Csrf令牌握手拦截器内部
1条答案
按热度按时间lx0bsm1f1#
spring-security已经有一个未决问题可以解决这个问题。在这个问题https://github.com/spring-projects/spring-security/issues/12378中也提供了一个解决方法
我的代码示例和解决方法可以在这里找到:https://github.com/OlliL/spring-boot-stomp
它还可以作为JWT + CSRF与STOMP Websockets的示例实现(我不是Maven;))