【问题标题】:Auth0 with Socket.IO forcing authentication使用 Socket.IO 强制身份验证的 Auth0
【发布时间】:2016-03-24 14:43:19
【问题描述】:

我需要使用令牌身份验证来保护 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请求没有token,但是服务端处理没问题。

我从哪里开始寻找?

【问题讨论】:

    标签: javascript node.js socket.io auth0 feathersjs


    【解决方案1】:

    强制认证的最佳方式是使用feathers-hooks。我们还提供了有关如何操作 authenticationauthorization 的指南。

    我们的文档目前有点混乱,所以很容易漏掉,但我们会尽快解决这个问题!

    【讨论】:

    • 我是否正确理解您推荐的方法是使用 passport-auth0 等?当您将应用程序配置为在“rest”和“socketio”和钩子之后使用羽毛护照时,“rest”和 socketio 都需要身份验证吗?这些 app.configure 是创建正确的“堆栈”所必需的吗?我不知道您的文档是否令人困惑。我已经做 Node.JS 两个星期了。丰富的包裹仍然是压倒性的。我想出了一种强制对 socket.io 请求进行身份验证的方法,但还没有让我的客户端和服务器正常运行。
    【解决方案2】:

    我可能发现了问题。当我使用下面的 sn-p [在 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
    }));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-10
      • 2016-07-08
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2015-08-29
      相关资源
      最近更新 更多