我有一个与我的web应用程序集成的LDAP插件,该部分工作正常,所以这不是一个编程问题。 这个问题涉及到LDAPsearchstring本身。 searchstring是什么样子,如果我想通过用户名和密码来查找用户? 如果这是不可能的,有没有一种LDAP的方式来validation用户? 要清楚我已经有一个成功的绑定使用服务帐户,而不是试图连接到LDAP,这是伟大的,现在我可以浏览它,但我想弄清楚什么searchstring是用来查找特定用户并取回密码,以便我可以比较它。 这样的LDAPsearch查询是什么样的?
更清晰些:
我能绑定一个服务的用户名和密码以及远程主机Alogging和BASE DN。 现在,我可以浏览一个树,并提交searchstring,并得到结果。 我现在希望能够根据表单提交的用户名和密码来search用户。
如果ldap服务器允许你查询密码属性,取决于它的存储方式,编写一个searchfilter来匹配用户密码可能是很困难的。 原因是userPassword属性(假设这是你用来存储密码的东西),可能存储有多个不同的哈希scheme,其中一些scheme实际上需要你解释userPassword属性,提取salt,使用salt和用户提供的密码生成一个摘要,然后将该摘要与存储在ldap中的内容进行比较。
OpenLDAP在这里的SHA / SSHA散列scheme上有一个faq-entry,它也包含一些validation使用这些scheme的userPassword属性的代码。 也可以使用其他scheme,我记得看到MD5和SMD5,它们与SSHA / SHA几乎相同,只是采用了不同的摘要algorithm。
但是,我build议(如果可能的话)用用户提供的密码绑定到用户dn,并让ldap服务器处理validation用户名/ dn和密码的问题。
格式是:
LDAP://{your full domain name}/ DC={first name of your domain}, DC={2nd name of your domain} , and so on"
例如:
LDAP://foo.com/ou=Sales,cn=JSavill,dc=foo,dc=com)
如果你正在实现这个应用程序,与Ldap树绑定远没有猜测使用了哪个哈希scheme和salt。 绑定只是单线程和exception/错误检查。
正如@Kjetil所说,这是可能的,但对我来说,不是这样做的。 如果你错过了salt或者hash,最后可能会产生一个错误的结果(清除密码是可以的,但是hash是错误的)。 而且,为了得到这个信息,你需要绑定。