【发布时间】:2017-08-03 14:05:46
【问题描述】:
我正在使用护照进行身份验证/授权以及本地策略和 JWT。
经过一些研究(密集的谷歌搜索;)我知道授权的最佳位置是使用策略,因为它适用于常规 HTTP 请求和套接字请求(通过可以发送“虚拟”的 SailsSocket 对象类似 HTTP 的请求)。
我现在正试图弄清楚如何正确使用套接字,我发现有一个beforeConnect 处理程序允许拒绝连接。虽然这没什么大不了的(因为我有一个政策会阻止它获取数据),但我希望能够拒绝连接 - 我认为它更健康,有什么理由允许未经授权的套接字连接。
我只想在初始身份验证后连接套接字,以便在我的套接字初始化中设置标头以包含 JWT:
io.sails.url = connections.http.baseURL;
io.sails.headers = {
'Authorization': 'Bearer ' + token
};
io.sails.useCORSRouteToGetCookie = false;
io.socket = io.sails.connect();
io.socket.on('...', someHandler);
这似乎工作正常 - 套接字请求符合 JWT 策略,我在我的控制器方法中获得了一个 req.user 用于套接字请求。
我的问题是 - 我如何拒绝没有令牌的用户连接(我什至应该这样做吗?)
当我闯入beforeConnect 时,我在握手对象中看不到授权标头。
更新:此外,我现在尝试在连接时在查询中发送令牌:
io.socket = io.sails.connect({token: token});
这样,我可以看到握手中的令牌。我希望它在不存在的handshake.query 中。相反,它在handshake._query 中可用,而sails 文档(here)声称应该在socket.handshake.query 下(但socket 甚至不存在于beforeConnect 中,默认函数占用空间为@987654332 @)
这些是错误吗?我错过了什么吗?
【问题讨论】:
标签: node.js sockets sails.js passport.js