And*_*dis 7 authentication session node.js express
我想用express开发一个node.js应用程序.该应用程序将支持多个访问级别.所有用户都将通过用户名和密码进行身份验证.我一直使用的身份验证方法如下:
这个过程有多安全?它使用cookies吗?它有漏洞吗?通过websockets和socket.io或任何其他不同方式控制会话更安全吗?提前致谢
快递会议将使用cookie,如果您将设置.它将交换用于在服务器端触发会话恢复的长密钥.
服务器端的会话数据不通过cookie与客户端共享.您可以在响应服务器端启用会话的页面请求的响应中验证这一点.
Socket.IO能够在握手过程中恢复会话数据,因为它从正常的HTTP请求开始,并且还交换cookie,用于验证用户的身份以及另一个用于会话恢复的验证.
只要被盗的cookie无法从另一个远程端点和浏览器访问,这是非常有效和安全的.
为了使不同的用户类型具有不同的访问限制,我使用了中间件函数,这些函数在路由声明中非常方便.
从编码的角度来看,它们可能看起来像这样:
var userTypes = {
any: function(types) {
return function(req, res, next) {
if (types.indexOf(req.session.user.type) != -1) {
return next();
} else {
return next(new Error('permission denied'));
}
}
},
is: function(type) {
return function(req, res, next) {
if (req.session.user.type == type) {
return next();
} else {
return next(new Error('permission denied'));
}
}
}
}
app.get('/items', userTypes.any([ 'developer', 'admin' ]), function(req, res, next) {
// will execute if user type is developer or admin
});
app.use(function(err, req, res, next) {
console.log(err);
res.send(err);
});
Run Code Online (Sandbox Code Playgroud)
中间件是同样的功能,接受作为最后一个函数req,res并且next,这样你就可以从中获取会话数据,并可以调用next()是否有效的情况下,或next(new Error('reason'));不会继续中间件最后一个函数链,但会蹦出路由手柄错误.
如果您有应该尝试回退的路由链,那么next(new Error());您可能希望allowed在req某个地方拥有标志,而不是返回,然后检查最后一个路由回调以检查它是否是 - allowed如果没有则调用next()它将尝试找到另一个路径适合查询.
| 归档时间: |
|
| 查看次数: |
4258 次 |
| 最近记录: |