LDAP – 仅按名称查找用户

我对LDAP不太熟悉,但是我正在使用Node.js应用程序进行身份validation,并且Web应用程序的用户凭据将从组织的Windows域中获取。

我有LDAP查找工作(使用Passport.js节点模块),但是为了使其工作,我必须把用户的完整的DN到节点。 例如,让我们说:

  1. 我的FQDN是mydomain.private.net

  2. 我的用户存储在一个组织单位,比方说staff

现在,如果我想查找用户joe ,我必须把这个string放入Node:

 var username = 'CN=joe,OU=staff,DC=mydomain,DC=private,DC=net'; 

我真的必须跟踪所有这一切吗?

如果我的用户在两个不同的组织单位呢? 客户端浏览器不知道! 它只知道:

 username = 'joe'; password = 'xxxxx'; 

如果您尝试以pipe理员身份login,该怎么办? pipe理员默认情况下总是处于完全不同的OU。

有没有一种方法来引用一个LDAP对象的名字,而不是别的?

这是一个普通的LDAP问题。 您需要从用户那里获得唯一的标识符,然后查找它。

通常这是uid属性的用途。 活动目录可能会或可能没有填充,并且通常依赖于域中必须是唯一的sAMAccountName。

所以你需要一个两步的过程。

1)查询uid = joe或samAccountName = joe 2)使用结果testing绑定或密码比较。

然后,您将使用DC=mydomain,DC=private,DC=net值作为从中进行search的根目录。

(回答我自己的问题)

geoffc的答案是正确的,这是适用于我的Node.js应用程序使用activedirectory npm模块的工作解决scheme:

  // First search for the user itself in the domain. // If successfully found, the findUser function // will return the full DN string, which is // subsequently used to properly query and authenticate // the user. var AD = self.ADs[domain]; AD.findUser(username, function(err, user) { if (err) { cb(false, 'AD error on findUser', err); return; } if (!user) { cb(false, 'User does not exist', void 0); } else { username = user.dn; AD.authenticate(username, password, function(err, authenticated) { if (authenticated == false) { cb(false, err, void 0); return; } else { cb(true, 'Authenticated', void 0); } }); } });