Javascript LDAP-仅按名称查找用户
我不太熟悉LDAP,但是我正在Node.js应用程序中进行身份验证,web应用程序的用户凭据将从组织的Windows域中获取 我有LDAP查找功能(使用Javascript LDAP-仅按名称查找用户,javascript,node.js,active-directory,ldap,Javascript,Node.js,Active Directory,Ldap,我不太熟悉LDAP,但是我正在Node.js应用程序中进行身份验证,web应用程序的用户凭据将从组织的Windows域中获取 我有LDAP查找功能(使用Passport.jsNode模块),但是为了让它工作,我必须将用户的完整DN放入节点中。例如,假设: 我的FQDN是mydomain.private.net 我的用户存储在一个组织单元中,比如说staff 现在,如果我想查找userjoe,我必须将此字符串放入节点: var username = 'CN=joe,OU=staff,DC=mydo
Passport.js
Node模块),但是为了让它工作,我必须将用户的完整DN放入节点中。例如,假设:
mydomain.private.net
staff
joe
,我必须将此字符串放入节点:
var username = 'CN=joe,OU=staff,DC=mydomain,DC=private,DC=net';
我真的要记录这些吗?
如果我的用户位于两个不同的组织单元中,该怎么办?客户端浏览器不知道这一点!它只知道:
username = 'joe';
password = 'xxxxx';
如果您尝试以管理员身份登录怎么办?默认情况下,管理员始终处于完全不同的OU中
是否有一种方法仅通过名称而不通过其他方式引用LDAP对象?这是一个常见的LDAP问题。您需要从用户处获取唯一标识符,然后查找它 通常这就是
uid
属性的用途。Active Directory可能有也可能没有填充,通常依赖于域内必须唯一的sAMAccountName
所以你需要一个两步的过程
1) 查询uid=joe或samAccountName=joe
2) 使用结果测试绑定或密码比较
然后使用DC=mydomain,DC=private,DC=net
值作为根目录进行搜索。(回答我自己的问题)
geoffc的回答是正确的,这是适用于my Node.js应用程序的工作解决方案,使用activedirectory
npm模块:
// 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);
}
});
}
});
谢谢-不久前我终于找到了答案,但是你的回答确实指向了正确的解决方案,我在下面详细介绍了。谢谢!