socket.io 怎样比较好的实现权限验证
发布于 9 年前 作者 lik0914 6614 次浏览 最后一次编辑是 8 年前 来自 问答

不验证的话,任何人拿到连接地址都可以使用,完全透明,怎样实现一种机制,做一下安全校验呢 目前,允许游客使用, 如果使用token+expiretime的话,实现思路是什么样呢

8 回复

@luoyjx 谢谢

function postAuthenticate(socket, data) {
      var username = data.username;
    
      db.findUser('User', {username:username}, function(err, user) {
       		socket.client.user = user;
      }
}

这个是大概意思是保活用的,意思,每次发送数据的与服务器端进行交互的时候,都要执行这个方法验证了?

@lik0914 没有啊,https://github.com/invisiblejs/socketio-auth/blob/development/lib/socketio-auth.js 看这里。 他这个只是提供了一个验证的模型给你,第一次验证后成功的话连接会绑定上

socket.auth = true;

并发射一个authenticated事件回去,或者失败发射unauthorized事件,其他都是你自己控制的啊。

至于这个postAuthenticate函数只是由你自己决定是否在成功后在连接上绑上用户信息或者什么的。 你不写这函数也可以的。

但是,当你使用了socketio-auth的话,当连接时,不校验或者校验失败他都会在设置的timeout时间后给你强制断开。

https://github.com/auth0/socketio-jwt 这个是一个相对比较成熟的方案, 还有一种是适用于浏览器的 用cookie https://www.npmjs.com/package/session.socket.io

@Pana 恩~感谢分享,刚写了篇简单socketio-auth,虽然较为简单,待会奉上

谢谢大家

回到顶部