2015-10-13 77 views
1

我有一段时间让omniauth-ldap能够正常使用我们的AD服务器,我相信这是因为我们的用户名有我们的域名。Omniauth-ldap无效的凭据

这将成功地连接到我们的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" 

UPDATE

这方面的工作此外,我发现omniauth-ldap会将bind方法设置为:anonymous,如果:bind_dn和:password未设置。

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

我需要的是

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

但密码和输入的用户名只提供给连接,如果你硬编码他们。

回答

0

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

1

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

  1. 调用ldap搜索(如果匿名搜索不允许在AD/LDAP中使用,则使用bind_dn和密码)为用户提取DN。
  2. 然后它使用来自步骤1的DN和用户输入的密码绑定到LDAP/AP。

我相信步骤1)是不必要的。大多数DN可以从用户名派生。