我可以使用绑定 DN 和绑定密码浏览现有 LDAP 目录的用户详细信息。我找不到任何存储用户密码的条目。我用于连接 MSAD LDAP 的绑定帐户中是否有可能隐藏密码属性?如果没有,那么 LDAP 是否将密码单独存储在其他地方?
我计划配置我的应用程序以基于此 LDAP 验证用户身份。
答案1
我计划配置我的应用程序以基于此 LDAP 验证用户身份。
验证 ldap 帐户的正确方法是简单地尝试使用凭证绑定到 ldap 服务器。对于某些服务器,您需要提供完整的可分辨名称才能登录。因此,您需要设置一个帐户,以根据其他标识符查找 DN。
凭证存储在哪里。
大多数服务器将哈希存储在名为“密码”的属性中。但是此属性上设置了 ACL,因此没有人可以读取它。Microsoft 根本不允许通过 LDAP 读取密码哈希作为安全功能。它只能通过 LDAPS 连接(即 SSL 中的 LDAP)进行设置。设置 Windows 以支持 LDAPS 需要创建 CA 或购买证书。
答案2
一般而言,虽然属性可能看起来像任何 LDAP 系统中的属性,但密码属性几乎总是一种特殊情况。也许 LDAP 服务器将其限制为一种特殊情况。也许 ACL 保护它。也许它是可写的,但不可读。
通常实际上有多个密码属性(AD 有 unicodePassword 和 userPassword),这取决于在哪种情况下使用哪个。Novell/NetIQ eDirectory 有 userPassword,这取决于您的配置方式以及其下面的值(RSA 密钥对、nspmPassword 或简单密码,这比简单属性更奇怪,因为它存储在多个属性中)
一些 LDAP 服务器将允许您使用散列值进行绑定,该散列值与存储的散列值匹配,并且散列值可能可检索,但不可逆。
但关键是,这应该无关紧要。由于每个 LDAP 服务器都不同,您需要使用标准方法获取 LDAP 密码,即尝试使用提供的 DN 和密码作为用户进行绑定。如果他们没有提供 DN,请搜索 uid=Username 或 cn=username 或您的命名属性,以查找完整 DN。
最后,请注意 LDAP 标准规定使用空白密码的绑定将成功,但作为匿名连接。因此您需要确保允许的密码不为空白,否则您将获得成功绑定,并可能在不知情的情况下让某人进入。