4

我需要使用令牌身份验证来保护 Feathers 数据库适配器导出的服务。我们为 REST 做了这个:

var authenticate = jwt({
  secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'),
  audience: process.env.AUTH0_CLIENT_ID
});

为了防止未经身份验证的客户端访问 REST 服务,我们这样做:

app.use('/api', authenticate);

对 websocket 的访问也应该被锁定。我找到了一些例子。理论上,下面应该启用 socket.io 的身份验证。

app.configure(feathers.socketio(function(io) {
  io.on('connection', socketioJwt.authorize({
    secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'),
    audience: process.env.AUTH0_CLIENT_ID,
    timeout: 5000 // 5 seconds to send the authentication message
  })).on('authenticated', function(socket) {
//    console.log('token: ' + socket.decoded_token.name);
    socket.emit('news', { hello: 'world' });
    socket.on('my other event', function (data) {
      console.log(data);
    });
  });
}));

然而,这并没有发生。客户端 socket.io 请求没有令牌,但服务器没有问题处理它们。

我从哪里开始寻找?

4

2 回答 2

1

强制身份验证的最佳方法是使用feathers-hooks。我们还提供了有关如何进行身份验证授权的指南。

我们的文档目前有点混乱,所以很容易错过,但我们会尽快修复!

于 2015-12-19T07:17:54.420 回答
0

我可能发现了问题。当我使用下面的代码片段 [在 io.on() 之前] 锁定 socket.io 时,它似乎有效。

io.use(socketioJwt.authorize({
  secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'),
  audience: process.env.AUTH0_CLIENT_ID,
  handshake: true
}));

现在,我需要弄清楚如何让客户端和服务器运行良好。

于 2015-12-18T07:50:30.037 回答