CNode

socket.io 怎样比较好的实现权限验证

问答
Llik0914发布于11 年前最后回复11 年前8 回复7895 浏览0 收藏

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

查看回复

回复 (8)

L
lik0914#2·11 年前

谢谢大家

L
lik0914#3·11 年前
引用 luoyjxsocketio auth 来一发不 http://blog.gaoqixhb.com/p/5441fc233ca0d27a07391949

@luoyjx 谢谢

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

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

L
luoyjx#4·11 年前
引用 lik0914@luoyjx 谢谢 这个是大概意思是保活用的,意思,每次发送数据的与服务器端进行交互的时候,都要执行这个方法验证了?

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

socket.auth = true;

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

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

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

P
Pana#5·11 年前

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

S
soliury#6·11 年前

@luoyjx @Pana @lik0914 @luoyjx test

From Noder

L
luoyjx#7·11 年前
参与回复
登录后即可参与回复。登录