我正在使用 Spring LDAP,我看到每个人都使用两个绑定(bind)。第一个绑定(bind)为服务帐户,第二个绑定(bind)为具有给定密码的用户。但我发现即使没有第一次绑定(bind),也可以针对 ldap 中的密码执行用户验证。
谁能解释一下为什么我们在 ldap 中遵循两个绑定(bind)?第一次绑定(bind)使用服务帐户有何意义?
最佳答案
要在 LDAP 中进行身份验证,您需要拥有 DN 和密码。
通常 2 个绑定(bind)的原因是您没有 DN - 用户名不一定是 DN 的一部分。因此,您必须使用服务帐户通过某些属性查找用户(DN),例如“mail={mail}”,然后通过进行另一个绑定(bind)来验证找到的 DN 的密码。
可以在两种情况下使用单个绑定(bind):
- 您无需搜索即可确定 DN,例如如果使用 uid+password 进行登录,并且“uid”是 DN 的一部分,并且 LDAP 层次结构对于所有用户都是平坦的,例如“uid={uid},ou=用户,...”。
- 您不通过绑定(bind)执行密码检查,而是通过服务帐户获取密码哈希并自行比较哈希。
关于java - 为什么 LDAP 身份验证例程通常使用两个绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185420/