我已经阅读了大量有关 LDAP 的信息,但有些内容我不明白。
假设我有一个 J2EE 应用程序,它既可以验证本地用户,也可以验证 LDAP 用户(互斥的替代方案)。在应用程序中指定 LDAP 服务器 IP 地址、基本 DN、连接 DN 和密码后,我的用户现在可以使用他们的 LDAP 信息登录。
现在,假设“myuser”使用密码“mypassword”登录应用程序。发生以下什么情况?
应用程序接收登录请求,然后使用其自己的凭据绑定到 LDAP,然后查找“myuser”的条目并将“mypassword”与存储在 LDAP 目录中的匹配条目的密码进行比较,然后允许或拒绝访问。
应用程序接收登录请求,然后将“myuser”和“mypassword”凭据传递给 LDAP(绑定 DN 和密码),然后根据绑定操作收到的响应,允许或拒绝用户?
它究竟是如何工作的?
答案1
据我所知(我不是这方面的专家),这更像是 1 而不是 2,但并不完全如此。应用程序接收登录请求。它使用自己的凭据绑定到 LDAP,密码以明文传输(这就是为什么 LDAPS 或通过 TLS 升级的 LDAP 是个好主意)。这些凭据必须具有足够的权限,以便 LDAP 服务器允许搜索与myuser
帐户相关的各种存储参数,包括存储的、散列的用户密码。
然后,应用程序mypassword
对用户提供的 进行哈希处理,并将其与 LDAP 返回的哈希值进行比较。如果它们匹配,则表明提供的凭据有效,并且 myuser 已通过身份验证;如果不匹配,则表明未通过身份验证。