测试LDAP用户凭据的简便方法

78

有没有一种简单的方法可以测试用户凭据是否与LDAP实例匹配?我知道如何编写Java程序,该程序将获取“用户DN”和密码,并将其与LDAP实例进行检查。但是,是否有更简单的方法?特别是一种不仅验证用户身份,而且列出所有用户角色的方法。

6个回答

109

ldapwhoami -vvv -h <hostname> -p <port> -D <binddn> -x -w <passwd>,其中binddn是您正在验证其凭据的人的DN。

如果验证成功(即凭据有效),则会收到Result: Success (0)。如果验证失败,则会收到ldap_bind: Invalid credentials (49)


至少在我的系统上,如果提供空的用户名和/或密码(“”),则当服务器可达时,ldapwhoami会返回“结果:成功(0)”。 - Stephen
@Garrett Hyde,你能分享一个带有模拟DN的例子吗? - ndemarco
1
@NicholasDeMarco 这是一个DN的示例:uid=john.doe,ou=People,dc=example,dc=com - Garrett Hyde
4
对于我来说,“ldapwhoami -D 'cn=username,ou=users,dc=compagny,dc=com' -x -W”是需要执行的命令。 - themadmax

17

使用ldapsearch进行身份验证。可以使用opends版本如下:

ldapsearch --hostname hostname --port port \
    --bindDN userdn --bindPassword password \
    --baseDN '' --searchScope base 'objectClass=*' 1.1

1
这样密码就可以在进程列表中以明文形式查看了吗? - Kiril
11
我认为用"-W"(提示输入密码)代替"--bindPassword password"可以解决这个问题。 - ibic
我应该安装哪个软件包才能获得ldapsearch - undefined

12

你应该试一下 Softerra 的 LDAP Browser (LDAP Administrator 的免费版),可以在这里下载:

http://www.ldapbrowser.com/download.htm

我广泛地使用这个应用程序进行所有的 Active Directory、OpenLDAP 和 Novell eDirectory 开发工作,它非常有价值。

如果你只想检查一个用户名/密码组合是否有效,那么你只需要为 LDAP 服务器创建一个"Profile"(配置文件),然后在创建过程的第三步输入凭据:

enter image description here

点击“完成",你会使用指定的凭据、认证机制和密码向服务器发起绑定。如果绑定不成功,将会提示你。


2
这种方法是无效的:它只会检查用户是否有权限从LDAP中列出用户信息,而Active Directory并没有默认授予此权限。在这种情况下,即使用户凭据有效,身份验证仍可能失败。 - Sebazzz
不。这个命令会发出完整的目录绑定,就像标准的登录尝试一样。如果您没有查看基本目录的权限,那么您将只会看到一个空白屏幕。 - X3074861X
好的回答!不知道这个应用程序。非常感谢你! - ClownCoder
很棒的应用程序 - 你知道在Mac上有没有类似的替代品吗? - emmdee

7

请注意,如果您不知道完整的绑定DN,您也可以只使用您的普通用户名或电子邮件和-U

ldapsearch -v -h contoso.com -U turiya.gouw@contoso.com -w 'MY_PASSWORD' -b 'DC=contoso,DC=com' '(objectClass=computer)'

3

身份验证是通过一个简单的ldap_bind命令完成的,该命令需要用户的DN和密码。当绑定成功时,用户将被验证。通常,您可以通过基于用户uid或电子邮件地址的ldap_search获取用户的DN。

获取用户角色有所不同,因为它是一个ldap_search并取决于角色在ldap中存储的位置和方式。但是,在用于查找用户DN的lap_search期间,您可能能够检索到角色。


谢谢您的回复。我真正需要的是一个工具,在这个工具中,我可以输入用户DN和密码,然后该工具将测试并查看是否可以使用这些凭据进行身份验证。这是一个非常容易开发的工具,所以我希望已经有这样的工具存在。 - user1888243
该工具被称为ldap_bind。 - user207421
Unix/Linux提供了“ldapsearch”(主要来自openLDAP),使用适当的选项,您不会在“进程列表”的“历史记录”中看到密码。 - Bernhard Thalmayr
@heiglandreas 我的系统上找不到ldap_bind命令,这是来自OpenLDAP库的C函数吗? - SebMa

1
由于某些原因,接受的答案不起作用,在 Linux Alpine 中参数并不完全相同。这个命令应该可以:
ldapsearch -v -H ldap://dc1.MYDOMAIN.com -D "cn=Administrator,cn=Users,dc=MYDOMAIN,dc=com" -x -w SomeP@ssWord -Z -d 4

这对于调试LDAP非常有帮助,因为它会精确输出任何问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接