针对OpenLDAP中的特定属性进行身份验证

时间:2014-10-13 17:35:19

标签: openldap

背景

我们组织中的另一个团队拥有完全配置的Active Directory服务器。我的团队构建了Ruby on Rails应用程序,我们根据他们的设置对Web应用程序的用户进行身份验证。由于一些新的安全策略正在实施,我们的开发机器将无法再直接与生产服务器通信。因此,我尝试在我的本地计算机上安装OpenLDAP(运行Fedora),并在我开发时使用它来验证用户身份。

设置

我已经能够完全配置OpenLDAP并插入记录。我的数据库看起来像:

dc=dev,dc=com
     ou=Users
           cn=User 1

cn=User 1条目中,我有一个名为accountName的属性,我也有标准的userPassword属性。作为测试,我下载了一个LDAP浏览器,当我指定完整的DN(cn =用户1,ou =用户,dc = dev,dc = com)时,我能够成功进行身份验证,并输入密码&#39 ; s在userPassword字段中。

问题

在我们的生产环境中,我必须提供的所有身份验证都是基本DN(dc = dev,dc = com),accountName的值和相关密码。一旦我进行身份验证,我就可以访问用户1条目中的其他字段。使用accountName字段而不是完整DN进行身份验证需要做什么?

1 个答案:

答案 0 :(得分:1)

这里有两件事需要解决:

首先,如果您的生产环境是ActiveDirectory而您无法从开发人员工作站访问它,请让负责AD环境的团队创建一个" dev"您可以访问的环境。

虽然LDAP的基本概念是标准化的,但AD和OpenLDAP之间的实现具体细节会有很大差异。


其次 - 大多数 ^软件只能使用用户名和密码对LDAP进行身份验证的方式是:

  1. 用户:使用用户名和密码提交表单(网络,本机应用程序等)
  2. 登录过程:匿名绑定LDAP服务器,或使用固定服务帐户DN和密码绑定。
  3. 登录过程:LDAP搜索提供的用户名,匹配哪些属性与环境相关(例如" accountName"在您的情况下)
  4. 登录过程:获取找到的记录的DN(如果有)
  5. 登录过程:使用获取的DN和步骤1中提供的密码尝试经过身份验证的绑定。
  6. 编辑:

    ^在某些情况下,提供的用户名是用户RDN的值组件,例如:如果我的登录名是stephenr,我的用户条目的RDN可能是cn = stephenr。如果是这种情况,并且所有用户条目具有相同的父对象,则可以通过构建字符串来创建要进行身份验证的DN(上面的步骤5),例如, " CN = {}的userid,OU =用户,DC =例如,DC = COM"其中{userid}替换为步骤1中提供的用户名值。