我需要什么才能连接到 LDAP,并绑定到 more "general" DN 以搜索用户?
What do I need to connect to an LDAP, and bind to a more "general" DN to search for users?
我遇到了一个以前从未真正遇到过的问题,即从 NodeJS 应用程序连接到 LDAP。直到现在,我什至不知道有 LDAP 这样的东西,所以我一直在学习。这就是为什么这可能是一个愚蠢的问题,但我还没有找到任何简洁的答案。
要求是:"log to an LDAP from your application with the user and pass provided in your login screen"。客户端有一个 LDAP,并希望用它来验证我们应用程序的用户,因此在我们的登录屏幕中输入的用户和密码用于尝试登录到 LDAP。
我知道我需要三样东西才能连接到 LDAP:
- 服务器的URL
- 一个用户(有通行证)
- 以及要绑定的 DN
我目前正在使用 ldapjs
从 NodeJS 进行连接。据我所知,我需要用来对用户进行身份验证的操作 it's the bind
operation。为此,我需要创建服务器(已经完成,没有问题)并传递 dn 和密码。我假设 DN 包括用户。像
CN=myuser,OU=MyOrg,OU=Users,DN=MyLdapServer,DN=com
有效...前提是用户属于同一 "branch"。也就是说,如果他们都在,比方说,OU=MyOrg
。这就是为什么我能够 "hardcode" bind()
中的 DN 并且只需通过替换更改用户。
问题是,并非所有这些都属于同一个 "branch"(我不知道这个的技术名称)。说,我有一些在 OU=MyOrg
,一些在 OU=MyOtherOrg
...
所以我不知道用户的组织是什么,所以我无法让他绑定到 LDAP 客户端,因为我缺少 DN。
客户端仅向我们提供了一个示例,来自另一个使用 ASP.NET 和 ADO.NET 的应用程序,使用类似 SQL 命令的东西来获取 LDAP 信息。事实是,相当于 DN 的是一个更通用的名称。像
ldap://MyLdapServer.com/CN=[the_user_provided]
这显然奏效了。如果我尝试做同样的事情,使用 more "general" DN 路由(我假设它是 LDAP 树上的一个节点),提供用户密码之一,我会收到身份验证错误。
那么,怎么会呢?我错过了什么?我需要什么才能仅使用 "CN=[username]" DN 将用户登录到 LDAP?那是只有ADO.NET才能用的东西吗?
谢谢,如果这个问题太笼统,我们深表歉意。
根据我的评论:
要与 Active Directory 绑定,您不需要知道用户的完整 DN。 this page in the docs 上列出了所有不同的可用方法。因此,您可以使用 user@domain.com
作为示例。或者在大多数情况下仅提供的用户名即可。
我遇到了一个以前从未真正遇到过的问题,即从 NodeJS 应用程序连接到 LDAP。直到现在,我什至不知道有 LDAP 这样的东西,所以我一直在学习。这就是为什么这可能是一个愚蠢的问题,但我还没有找到任何简洁的答案。
要求是:"log to an LDAP from your application with the user and pass provided in your login screen"。客户端有一个 LDAP,并希望用它来验证我们应用程序的用户,因此在我们的登录屏幕中输入的用户和密码用于尝试登录到 LDAP。
我知道我需要三样东西才能连接到 LDAP:
- 服务器的URL
- 一个用户(有通行证)
- 以及要绑定的 DN
我目前正在使用 ldapjs
从 NodeJS 进行连接。据我所知,我需要用来对用户进行身份验证的操作 it's the bind
operation。为此,我需要创建服务器(已经完成,没有问题)并传递 dn 和密码。我假设 DN 包括用户。像
CN=myuser,OU=MyOrg,OU=Users,DN=MyLdapServer,DN=com
有效...前提是用户属于同一 "branch"。也就是说,如果他们都在,比方说,OU=MyOrg
。这就是为什么我能够 "hardcode" bind()
中的 DN 并且只需通过替换更改用户。
问题是,并非所有这些都属于同一个 "branch"(我不知道这个的技术名称)。说,我有一些在 OU=MyOrg
,一些在 OU=MyOtherOrg
...
所以我不知道用户的组织是什么,所以我无法让他绑定到 LDAP 客户端,因为我缺少 DN。
客户端仅向我们提供了一个示例,来自另一个使用 ASP.NET 和 ADO.NET 的应用程序,使用类似 SQL 命令的东西来获取 LDAP 信息。事实是,相当于 DN 的是一个更通用的名称。像
ldap://MyLdapServer.com/CN=[the_user_provided]
这显然奏效了。如果我尝试做同样的事情,使用 more "general" DN 路由(我假设它是 LDAP 树上的一个节点),提供用户密码之一,我会收到身份验证错误。
那么,怎么会呢?我错过了什么?我需要什么才能仅使用 "CN=[username]" DN 将用户登录到 LDAP?那是只有ADO.NET才能用的东西吗?
谢谢,如果这个问题太笼统,我们深表歉意。
根据我的评论:
要与 Active Directory 绑定,您不需要知道用户的完整 DN。 this page in the docs 上列出了所有不同的可用方法。因此,您可以使用 user@domain.com
作为示例。或者在大多数情况下仅提供的用户名即可。