【问题标题】:PassportJS - Getting payload data before it is passed to passport.authenticate as request parameterPassportJS - 在将有效负载数据作为请求参数传递给 passport.authenticate 之前获取它
【发布时间】:2017-07-30 14:52:45
【问题描述】:

有一个 passport.js 实现被用于LDAP-auth,它可以工作。现在下一步是在客户端使用Crypto-js 加密密码,如下所示:

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'});
});
.....

在使用请求“req”调用passport.authenticate 之前,在服务器端服务上,需要对aes 加密密码进行解密。如何在这里实施? (问题不在于加密,而是如何在将数据传递给 passport.authenticate 之前获取数据)

【问题讨论】:

  • 我不确定您要在这里做什么,但 SHA1 是哈希函数,而不是加密。它不能被“解密”。
  • 为什么不使用HTTPS(SSL)来加密服务器-客户端之间的通信?
  • @estus - 这个想法是让任何形式的暴力攻击变慢,并保持密码不被计算机检测到。该网络通过 https 进行加密,我不必关心这一点。我只想让密码远离客户端的肉眼。
  • 哈希无法解密。发送哈希假设它存储在数据库中,原始密码永远不会出现在任何地方。
  • 当其他事情都做对了,它不会让任何事情变得更安全。而且您应该知道自己在做什么非常好,因为破坏安全性比加强安全性要容易得多。而且我不认为没有盐的 SHA1 会有任何用处。

标签: javascript angularjs node.js passport.js cryptojs


【解决方案1】:

@Abhijay Ghildyal 我认为他们不理解您的问题。确实可以在请求传递给 passport.authenticate() 之前拦截请求。您想要做的是将这段代码添加到您的 express.js 或您在其中执行 express 服务器实现的任何文件中。此外,我在这里解密 request.body 而不是 req.user ,因为那时该用户尚未登录,但是如果您的情况不同,那很好,您可以以相同的方式解密 req.user 。 (这里的变量 app 是您的服务器的名称,即 var app = express();

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 = require('body-parser');) 之后。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2020-05-15
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多