打开 LDAP 身份验证 - 如何在没有绑定的情况下验证 userPassword?

rah*_*286 2 openldap password ldap authentication single-sign-on

我在做什么...

尝试为我们组织的所有机器、博客、wiki、CRM、HRM、项目管理工具、SVN 等实现单点登录……

我们在运行 CentOS 的专用服务器上安装并配置了 OpenLDAP。我使用 phpLdapAdmin 添加组织结构和有关各种用户、客户、资源的信息。

用户的示例条目...

DN 是 :: cn=Bill Gates, ou=users, dc=example, dc=com

用户 ID :: bill.gates

邮件 :: bill.gates@example.com

用户密码 :: as2%$%66789ds(一些 md5 神秘值)

我现在在哪里...

OpenLDdap 工作正常。绑定测试也成功运行。

我想做的事...

使用更高权限的用户绑定,然后通过输入的用户名或邮件搜索用户,与CN略有不同。重点是我想根据不属于 RDN 的属性对用户进行身份验证。

我被卡住的地方...

  1. 我无法使用 userid 进行绑定,因为它不是 DN 的一部分。这一般允许吗?
  2. 我可以使用不同的 LDAP 用户(例如高特权用户)进行绑定,并执行 ldap_search 以根据过滤器 userId 获取唯一记录,但随后用户输入密码的 md5 与 userPassword 字段不匹配。OpenDLdap 使用一些盐进行加密。我也不想去盐。有什么出路吗?

我的问题(最后)

  1. 我们可以对不属于 RDN 的属性执行 ldap_bind 吗?
  2. 我们可以向 OpenLDAP 服务器发送一个未加密的密码(我将使用 HTTPS 隧道来保证安全)并要求 OpenLDAP 加密并检查提交的用户密码吗?这通常是我们在所有网络应用程序中所做的,对吗?
  3. (题外话)用户 ID 可以包含 . (点)和空格。我们需要在“First Name(givenName)”和“Last Name(sn)”之间使用一些字符。哪个是安全字符?我的意思是世界上所有(或大多数)应用程序允许在用户名中使用哪个非 aplha 数字字符?

我最关心的是采用一种方法,它可以很容易地与大多数应用程序一起使用。有许多基于 Web 的应用程序、桌面软件等,我们将在任务单点登录期间对其进行修改!

感谢您阅读......并提前感谢您的帮助!

-拉胡尔

sys*_*138 5

关于第一个问题:

我曾与另一个 LDAP 系统合作,该系统允许针对各种用户属性进行“登录”。解决方案是做两个连接。第一个连接可能是匿名绑定的,它使用用户提供的信息查询 LDAP,以定位其用户对象的 RDN。第二个连接尝试使用发现的 RDN 和提供的密码进行绑定密码。这是一个两步过程,它有效。

但是,如果此应用程序将获得大量使用提供的属性而不是 RDN 本身的登录名,那么将这些属性编入索引将是一个好主意。这是一个性能问题。

二:

据我所知,OpenLDAP 支持 LDAP-SSL(TCP/636),这可能是比 HTTPS 隧道更好的路由。默认情况下 LDAP 绑定是明文,但有一些 LDAP 扩展允许其他方法。例如,Active Directory 允许 NTLM LDAP 绑定,而且我很确定 LDAP 在某些时候也已被 kerberized。我不知道 openLDAP 支持哪些方法。

三:

我有 LDAP 源,其属性中包含“firstname.lastname@org.edu”格式的电子邮件。命名属性变得更危险的地方,这就是我的 openLDAP 体验失败的地方。我不知道支持什么。我知道 Active Directory 允许命名属性中有空格,而 Novell eDirectory 允许空格和句点(尽管不建议这样做)。通常,命名属性是 userID,而 givenName、surname、emailAddress 等属性包含特殊字符。由于它们不是命名属性,因此它们没有相同的限制。