Omniauth-ldap无效凭据

时间:2015-10-13 19:17:09

标签: ruby active-directory ldap omniauth padrino

我有一点时间让omniauth-ldap与我们的AD服务器一起正常工作,我相信这是因为我们的用户名中包含了我们的域名。

这将成功连接到我们的ldap服务器:

ldapsearch -h ldap.ourdomain.com -b "dc=ourdomain,dc=int" -D "OURDOMAIN\username" -w <password> '(sAMAccountName=username)'

但是,OmniAuth中的这些设置只会导致“凭据无效”

Padrino.use OmniAuth::Strategies::LDAP,
    :host => "ldap.ourdomain.com",
    :base => "dc=OURDOMAIN,dc=INT",
    :uid => "sAMAccountName",
    :bind_dn => 'OURDOMAIN\%{username}',
    # This is hard coded for now, but I need it to be the value entered by the user
    :password => "mypassword"

更新

进一步研究,我发现omniauth-ldap将bind方法设置为:anonymous如果:bind_dn和:password没有设置。

但是,如果设置 值,它不会插入用户名,也不会提供用户输入的密码。

我需要的是

:bind_dn => 'OURDOMAIN\<user entered username>',
:password => <user entered password>

但密码和输入的用户名仅在您对其进行硬编码时提供给连接。

2 个答案:

答案 0 :(得分:1)

这主要是因为omniauth-ldap的设计选择。 设计是用户提供的用户名(电子邮件或id)不足以构建可用于绑定的DN(可分辨名称)。因此,omniauth ldap所做的是

  1. 调用ldap搜索(如果AD / LDAP中不允许匿名搜索,则使用bind_dn和密码)为用户提取DN。
  2. 然后使用步骤1中的DN和用户输入的密码绑定到LDAP / AP。
  3. 我认为步骤1)是不必要的。大多数DN可以从用户名派生。

答案 1 :(得分:0)

我必须通过创建服务帐户来解决这个问题。该帐户登录然后查询实际尝试登录的用户的存在和有效性。可以在Omniauth配置中设置服务帐户凭据,然后您可以像使用任何其他omniauth方法一样使用omniauth-ldap。 / p>