java - 为什么 LDAP 身份验证例程通常使用两个绑定(bind)?

标签 java spring ldap openldap spring-ldap

我正在使用 Spring LDAP,我看到每个人都使用两个绑定(bind)。第一个绑定(bind)为服务帐户,第二个绑定(bind)为具有给定密码的用户。但我发现即使没有第一次绑定(bind),也可以针对 ldap 中的密码执行用户验证。

谁能解释一下为什么我们在 ldap 中遵循两个绑定(bind)?第一次绑定(bind)使用服务帐户有何意义?

最佳答案

要在 LDAP 中进行身份验证,您需要拥有 DN 和密码。

通常 2 个绑定(bind)的原因是您没有 DN - 用户名不一定是 DN 的一部分。因此,您必须使用服务帐户通过某些属性查找用户(DN),例如“mail={mail}”,然后通过进行另一个绑定(bind)来验证找到的 DN 的密码。

可以在两种情况下使用单个绑定(bind):

  1. 您无需搜索即可确定 DN,例如如果使用 uid+password 进行登录,并且“uid”是 DN 的一部分,并且 LDAP 层次结构对于所有用户都是平坦的,例如“uid={uid},ou=用户,...”。
  2. 您不通过绑定(bind)执行密码检查,而是通过服务帐户获取密码哈希并自行比较哈希。

关于java - 为什么 LDAP 身份验证例程通常使用两个绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185420/

相关文章:

java - 正确的 Info.plist 设置以在特定 JVM 中启动 Java 应用程序

java - JDK中的先进先出队列

html - 将原始 HTML 代码转换为 PDF 文件

spring - 成功部署 Spring 应用程序后运行代码

java - EJB 3 事务传播和 UnboundId LDAP SDK

ldap - 使用 SASL 的 Gitlab LDAP

Java:获取枚举的 ExceptionInInitializerError

java - iText 的 getPageN() 和 getPageNRelease() 调用有什么区别?

java - 是否可以将自定义属性添加到 java bean 验证注释?

java - 检查java代码中的密码(安全问题)