【问题标题】:How to use jwtToken in the communication via socket.io?如何在通过 socket.io 的通信中使用 jwtToken?
【发布时间】:2018-10-20 15:51:35
【问题描述】:


我想通过 socket.io 通信 angular 和 nodejs-express 验证用户身份验证的最佳方法是什么?

io.on('connection', function (socket) {
        let jwt = socket.token;
        //to Implement
        let isAuth = authService.verifyToken(jwt);
         if (!isAuth) {
           socket.disconnect()
           }

    });

这是个好方法吗?

【问题讨论】:

    标签: angular socket.io jwt


    【解决方案1】:

    你可以把你的 JWT 放在一个 HttpOnly Cookie 中(它是 raccomanded),

    这个cookie会在第一次http/s连接时由浏览器自动发送,

    那么在服务器端你可以这样做:

    这个来设置cookie

    _res.cookie('JWT', jwtBearerToken, { maxAge: expireMilliseconds, httpOnly: true})
    

    然后

    function async verifyToken(_socket: Socket, _next: NextFunction) {
    
        let xsrfToken = _socket.handshake.headers['x-xsrf-token'];
        var cookie = _socket.request.headers.cookie
        if (_socket.request.headers.cookie && xsrfToken) {
    
          let token = parseCookie(cookie);
          let decodedJWT: any;
    
          try {
          //using jsonwebtoken library
            decodedJWT = await 
       jwt.verify(token.JWT, this.RSA_PUBLIC_KEY, { algorithms: ['RS256'], });
    
    
          } catch (err) {
            //do something
    
            return;
          }
          _next();
        }
    
      }
    

    并在套接字服务器上“使用”此功能,如

    io.use((socket, next) => this.verifyToken(socket,next));
    

    Socke.io namespace.use(fn) API

    【讨论】:

    • 以及如何在角边附加令牌?
    • 您不是在 cookie 中附加令牌,而是在服务器端附加令牌。浏览器会为你发送
    • 这里你可以找到如何设置cookiesexpressjs.com/en/api.html#res.cookie
    【解决方案2】:

    我找到了一种有用的方法,使用 socketio-jwt

    var socketioJwt = require('socketio-jwt');
    
    var io = socketIo.listen(server);
    
    io.set('authorization', socketioJwt.authorize({
      secret: 'YOUR-SECRET',
      handshake: true
    }));
    

    在前面:this.socket = io(URLS.BASE_URL,{ query: 'token=' + localStorage.getItem('my-token') });

    我们假设 jwt 令牌存储在本地存储中。

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多