Javascript 如果不使用PassportJS,从安全角度来看,我会错过什么吗?
我正在NodeJS中创建一个后端,它将使用散列密码注册一个用户以保存在我们的数据库中。当用户想要使用创建的密码登录时,我使用散列密码,然后使用bcrypt的compareSync 对于这种情况,我并不认为使用Passport本地策略有什么意义,因为我在本地中间件中所做的唯一一件事就是使用bcrypt的compareSync来查看密码是否相同,我可以在我自己的中间件中轻松地做到这一点,并编写中间件来包含我想要的内容 我现在使用的Passport中间件代码是:Javascript 如果不使用PassportJS,从安全角度来看,我会错过什么吗?,javascript,node.js,passport.js,restify,Javascript,Node.js,Passport.js,Restify,我正在NodeJS中创建一个后端,它将使用散列密码注册一个用户以保存在我们的数据库中。当用户想要使用创建的密码登录时,我使用散列密码,然后使用bcrypt的compareSync 对于这种情况,我并不认为使用Passport本地策略有什么意义,因为我在本地中间件中所做的唯一一件事就是使用bcrypt的compareSync来查看密码是否相同,我可以在我自己的中间件中轻松地做到这一点,并编写中间件来包含我想要的内容 我现在使用的Passport中间件代码是: passport.use(new pa
passport.use(new passportLocal(function (username, password, done) {
r.table('user').filter({username: username}).limit(1).run()
.then(function (doc) {
if (doc._data && doc._data.length === 1) {
var data = doc._data[0][0];
if (data.password) {
if (bcrypt.compareSync(password, data.password)) {
done(null, data);
} else {
done(null, false, {message: 'Invalid username or password'})
}
} else {
done(null, false, {message: 'The user does not exist'});
}
} else {
done(null, false, {message: 'Invalid username or password'})
}
})
.catch(function (err) {
console.error(2222, err);
done(err);
});
}));
所以问题是,如果我错过了Passport提供的一些安全功能,而不是创建自己的中间件,用bcrypt检查密码?简单地说,Passport.Js可以轻松地集成第三方登录。如果将来可能需要添加这些服务之一,您应该使用它 如果您不打算使用任何第三方登录服务,那么就node.js而言,熟悉一个基本上已成为认证行业标准的库可能仍然有好处
也就是说,您没有理由不能使用自己的自定义身份验证脚本提供同等的服务。Ouch。那个金字塔…:SPassport只是方便,不一定会增加额外的安全性。因此,如果您以正确的方式实现中间件,您不会错过任何东西。本地策略的“安全”部分是您的bcrypt。护照根本不能给你任何安全感。但是,如果不使用passport,您将无法使用方便的模式(
passport.authenticate()
)或扩展以使用其他身份验证提供程序,而无需进行重大重构。老实说,我认为您的代码问题可以通过适当的关注点分离来解决,与passport无关。谢谢@robertklep=)@DanPantry您能详细说明我应该做什么分离吗?