2017-03-09 27 views
1

有正在使用的LDAP-auth其工作的passport.js实现。现在,下一步是使用Crypto-js客户端,如下所示加密密码:PassportJS - 获取有效载荷数据之前,它被传递给passport.authenticate作为请求参数

Client-side angular-js controller

$scope.authenticate = function() {  
    var auth = new login(); 
    auth.username = $scope.username; 
    auth.password = CryptoJS.AES.encrypt($scope.password); //// HERE 

    auth.$save(function (response){ 
    console.log(response); 
    },function(err){ 
    console.log(err); 
    }); 
} 

Server-side service

..... 
..... 
app.post('/login', passport.authenticate('ldapauth'), (req, res) => { 

    console.log("req.user: ",req.user); 
    req.session.username = req.user[ldap.username]; 
    req.session.userModel = req.user; 
    res.status(200).send({"success": 'success'}); 
}); 
..... 

在服务器端服务调用passport.authenticate与前请求'请求'aes加密的密码需要解密。这怎么能在这里实现? (现在的问题是不是加密,但如何才被传递给passport.authenticate的请求来获取数据)

+1

我不确定你要在这里做什么,但SHA1是散列函数,而不是加密。它不能被“解密”。 – estus

+0

为什么不使用HTTPS(SSL)来加密服务器客户端之间的通信? –

+0

@estus - 的想法是让任何形式的暴力攻击的速度较慢,并保持从密码通过电脑检测到隐藏。网络通过https进行加密,我不必关心这一点。我只是想让密码远离客户端的肉眼。 –

回答

2

@Abhijay Ghildyal我不认为他们明白你的问题。在将请求传递给passport.authenticate()之前确实有可能截获请求。什么你想要做的就是这个代码通过添加到您的express.js或任何文件,你做你的快递服务实现。另外,我在这里,因为在那个时间点解密,而不是req.user的request.body用户还没有登录,但是如果你的情况不同,那么你可以用同样的方法解密req.user。 (这里的变量应用程序是)你的服务器即VAR应用程序的名称=快递(;

app.use(function(req, res, next) { 
    if(req.url === '/login'){ 
     //CryptoJS.AES.decrypt() is Assumed to be the decrypter function here. 
     req.body = CryptoJS.AES.decrypt(req.body); 
     console.log(req.body); //To view decrypted body 
    } 
    next(); 
}); 

这就是它。这个中间件函数将在passport.authenticate()函数之前到达。只要确保,如果你将其应用到req.body先添加代码的这些线,导入bodyParser后(bodyParser =需要(“身体解析器”);)以上的通道前。

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
app.use(bodyParser.json());