V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
HenryWang0723
V2EX  ›  WebSocket

websocket 在 springsecurity 下结合 jwt 的问题

  •  
  •   HenryWang0723 · 2020-11-09 15:43:48 +08:00 · 1698 views
    This topic created in 1501 days ago, the information mentioned may be changed or developed.

    项目是前后端分离,SpringBoot+Vue,目前的接口都用的 SpringSecurity 框架,禁用了 session 改为了 jwt 单点登录,现在项目要加入 websocket 。我理解的 websocket 只在握手的时候发 http,那么在握手时在请求的 header 里加 jwt token (貌似 STOMP 可以做到),依旧用 Security 进行拦截,后续 websocket 建立好之后的通信就自动放过了?还是说每一包通信依旧是 http 会被 Security 全部拦截..?

    Supplement 1  ·  2020-11-10 17:48:43 +08:00
    Spring STOMP 并不能设置握手的 Http Header 。问题查了查没看到合适的,https://stackoverflow.com/questions/53019779/authenticate-websocket-connection-on-handshake-using-jwt-authentication-filter 这个提问基本一致,目前看到的解决方法是 spring security 放过 websocket 的 url,然后再 handshake 中加拦截器单独验证,是通过把 jwt token 放在 ws 的 url 里做验证。但是这种方法实际上脱离了 spring security,鉴权管理也要单独处理,头疼
    4 replies    2020-11-10 11:06:21 +08:00
    okey
        1
    okey  
       2020-11-09 16:00:38 +08:00
    我理解的是后续走的不是 ws 协议,和 SpringSecurity 无关了。
    okey
        2
    okey  
       2020-11-09 16:03:25 +08:00
    @okey 是 ws 协议,打错了。
    uselessVisitor
        3
    uselessVisitor  
       2020-11-09 21:09:54 +08:00 via Android
    当时做毕设也是用的和你同样的架构,最后搞不定总得第三方的 ws
    HenryWang0723
        4
    HenryWang0723  
    OP
       2020-11-10 11:06:21 +08:00
    @okey 这么说来只要能在握手的那包 http 请求中 在 header 里加上 jwt token 通过 Security 的拦截器验证过了就 ok 了?
    About   ·   Help   ·   Blog   ·   API   ·   FAQ   ·   Tools   ·   3856 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:59 · PVG 08:59 · LAX 16:59 · JFK 19:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.