Node.js Passport.DeserializeUser()安全性
我在Node.js应用程序中使用Passport.js进行身份验证。我理解函数反序列化用户:Node.js Passport.DeserializeUser()安全性,node.js,http,security,mongoose,passport.js,Node.js,Http,Security,Mongoose,Passport.js,我在Node.js应用程序中使用Passport.js进行身份验证。我理解函数反序列化用户: 在req.users中加载用户对象,并将其与用户发出的每个请求一起发送。但是,我担心的是,在每个HTTP请求中发送完整的用户对象是否安全,或者是否应该只使用user.find.select from Mongoose选择要发送的特定字段。如果是,是否存在除req.user.id以外的字段,如果没有这些字段,后续请求将无法工作,或者我是否可以取消选择所有其他字段?您可以选择在执行serializeUser
在req.users中加载用户对象,并将其与用户发出的每个请求一起发送。但是,我担心的是,在每个HTTP请求中发送完整的用户对象是否安全,或者是否应该只使用user.find.select from Mongoose选择要发送的特定字段。如果是,是否存在除req.user.id以外的字段,如果没有这些字段,后续请求将无法工作,或者我是否可以取消选择所有其他字段?您可以选择在执行serializeUser和deserializeUser时保留的内容 成功运行身份验证策略后,SerializeUser运行一次。在每一个进一步的请求中,反序列化用户都会运行 反序列化用户时,选择要保留在req.user中的字段 正如@Ebrahim所说,数据不会发送到客户端,它只在服务器端,可以用于req的生命周期。所以,您不必担心易被拦截。但是,我认为您应该在req.user中保留最少的数据 是目前为止最好的安全身份验证资源之一
希望这对你有帮助 req未发送到客户端。它在服务器中。您可以在req.Aha的生命周期中使用req.user,这样用户就没有访问req.user的权限。我可能只需要对发送的数据进行加密。好的,但我应该担心发送的数据可能容易被截获,而不是发送用户的关键字段,或者我的担心是无效的吗?正如易卜拉欣所说,数据没有发送到客户端,所以您不必担心容易被截获。但是,我认为您应该在req.user中保留最少的数据。
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
if (user) done(err, user);
});
});
//send 'user' instead of 'user._id' or 'user.id' into 'done()' function.
passport.serializeUser(function(user,done)
{
done(null,user);//this user is sent to 'deserializeUser'
});
passport.deserializeUser(function(user,done)
{
User.findById(user._id,function(err,user)
{
var currUser= {};
currUser._id=user._id;
//choose which fields to keep in req.user
currUser.email=user.email;
currUser.name = user.name;
//currUser is what is saved in 'req.user'
done(err,currUser);
});
});