我需要连接到LDAP,并绑定到更“通用”的DN来搜索用户?

时间:2016-08-23 18:42:32

标签: node.js active-directory ldap ldapjs

我遇到过以前从未真正遇到的问题,即从NodeJS应用程序连接到LDAP。到现在为止,我甚至都不知道有这样的东西,所以我一直在学习。这就是为什么这可能是一个愚蠢的问题,但我没有找到任何简明的答案。

要求是:“使用用户登录到您的应用程序的LDAP并在登录屏幕中提供通行证”。客户端有一个LDAP,并希望使用它来验证我们的应用程序的用户,因此在我们的登录屏幕中输入的用户和密码用于尝试登录LDAP。

我知道我需要三件事才能连接到LDAP:

  • 服务器的网址
  • 用户(带通行证)
  • 以及要绑定到
  • 的DN

我目前正在使用ldapjs来连接NodeJS。我理解,我需要用来验证用户的操作it's the bind operation。为此,我需要创建服务器(已经完成,没有问题)并传递dn和密码。我假设DN包括用户。像

这样的东西

CN=myuser,OU=MyOrg,OU=Users,DN=MyLdapServer,DN=com

哪个有用... ,前提是用户属于同一个“分支”。也就是说,如果所有这些都在,OU=MyOrg。这就是为什么我能够在bind()中“硬编码”DN而只是用替换来更改用户。

问题是,并非所有这些都属于同一个“分支”(我不知道这个的技术名称)。比如说,OU=MyOrg中有一些,OU=MyOtherOrg中有一些......

所以我不知道从用户的组织开始,所以我不能让他绑定到LDAP客户端,因为我缺少DN。

客户端只向我们提供了一个示例,来自另一个使用ASP.NET和ADO.NET的应用程序,使用SQL命令来获取LDAP信息。事实上,相当于DN是一个更通用的。像

这样的东西

ldap://MyLdapServer.com/CN=[the_user_provided]

显然,这很有效。如果我尝试做同样的事情,使用更“通用”的DN路由(我认为,这是LDAP树上的一个节点),提供一个用户的密码,我收到一个身份验证错误。

那么,为什么?我错过了什么?仅使用“CN = [用户名]”DN将用户登录到LDAP需要什么?这只是ADO.NET可以使用的东西吗?

谢谢,如果这个问题过于笼统,我很抱歉。

1 个答案:

答案 0 :(得分:1)

根据我的评论:

要与Active Directory绑定,您无需知道用户的完整DN。 this page in the docs上列出了所有不同的可用方法。因此,您可以使用user@domain.com作为示例。或者只是提供的用户名在大多数情况下都适用。