Node.js Passport.DeserializeUser()安全性

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

我在Node.js应用程序中使用Passport.js进行身份验证。我理解函数反序列化用户:


在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);
    });
});