0

我有一个带有角度前端的 nodejs 应用程序。当我想使用用户登录时,它仅在我输入 ssha 散列密码时才有效。但是使用纯文本密码我无法登录。

ldap 客户端配置:

function auth(user, password, successFn){
  var opts ={
    scope: 'sub',
    filter: '(&(objectClass=inetOrgPerson)(uid=' + user + '))',
  };

  var callback = function (err, res){
    handleResult(collect, err, res);
  };

  var collect = {
    list: [],
    entry: function(entry){ this.list.push(entry); },
    done: function(){
      var correct = this.list.length == 1;
      if ( correct ){
        var pw = this.list[0].userPassword;
        correct = (pw == password);
      }
      if ( correct ){
        var role = this.list[0].employeeType;
        successFn(role[0]);
      }
      else{
        successFn(correct);
      }

    }
  }

router.post('/login', function(req, res, next) {
  var user = req.body.username;
  var pw = req.body.password;

  ldap.auth(user, pw, function(role){  
    if ( role ){
      req.session.user = user;
      req.session.userRole = role;

nodejs中的代码有问题还是ldap服务器的配置错误?我该如何解决这个问题?

4

1 回答 1

0

这看起来像是一个主要的安全问题。您的代码未使用 LDAP 身份验证(即 LDAP 绑定请求)。它检索用户条目并将密码字段与用户输入进行比较。但是大多数 LDAP 服务器都会对用户密码进行哈希处理以保护它。我强烈建议更改身份验证方法以执行绑定以验证密码,然后收集角色。

于 2016-09-30T08:32:37.627 回答