如何编写通过用户名和密码查找用户的 LDAP 搜索字符串?

如何编写通过用户名和密码查找用户的 LDAP 搜索字符串?

我的 Web 应用程序中集成了一个 LDAP 插件,该部分运行良好,因此这不是一个编程问题。此问题与 LDAP 搜索字符串本身有关。如果我想通过用户名和密码查找用户,搜索字符串是什么样的?如果这不可能,LDAP 中是否有方法可以让我验证用户?要清楚的是,我已经使用服务帐户成功绑定,并且没有尝试连接到 LDAP,这很好,现在我可以浏览它,但是我试图弄清楚使用什么搜索字符串来查找特定用户并取回密码,以便我可以进行比较。这样的 LDAP 搜索查询是什么样的?

进一步澄清一下:

我能够使用服务用户名和密码以及远程主机 A 记录和 BASE DN 进行绑定。现在我可以浏览树以及提交搜索字符串并返回结果。我现在希望能够根据表单提交的用户名和密码搜索用户。

答案1

如果 ldap 服务器允许您查询密码属性,则根据其存储方式,编写搜索过滤器以匹配用户密码可能会很困难。原因是 userPassword 属性(假设这是您用于存储密码的属性)可能使用几种不同的哈希方案存储,其中一些方案实际上要求您解释 userPassword 属性,提取盐,使用盐和用户提供的密码生成摘要,然后将该摘要与 ldap 中存储的内容进行比较。

OpenLDAP 有一个关于 SHA/SSHA 哈希方案的常见问题条目这里,其中还包括一些使用这些方案来验证 userPassword 属性的代码。使用其他方案也是完全有可能的,我记得看到过 MD5 和 SMD5,它们与 SSHA/SHA 非常相似,只是摘要算法不同。

不过,我建议(如果可能的话)使用用户提供的密码绑定到用户 dn,并让 ldap 服务器处理验证用户名/dn 和密码的问题。

答案2

格式为:

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)

答案3

如果您将其实现到应用程序中,那么与 Ldap 树绑定远比猜测使用了哪种哈希方案和盐要简单得多。绑定只是一行代码和一个异常/错误检查。

正如 @Kjetil 所说,这是可能的,但对我来说,这不是正确的做法。如果您错过了盐或哈希,则可能会导致误报(清除密码没问题,但哈希错误)。此外,要获取该信息,您无论如何都需要绑定。

相关内容