我有一点时间让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>
但密码和输入的用户名仅在您对其进行硬编码时提供给连接。
答案 0 :(得分:1)
这主要是因为omniauth-ldap的设计选择。 设计是用户提供的用户名(电子邮件或id)不足以构建可用于绑定的DN(可分辨名称)。因此,omniauth ldap所做的是
我认为步骤1)是不必要的。大多数DN可以从用户名派生。
答案 1 :(得分:0)
我必须通过创建服务帐户来解决这个问题。该帐户登录然后查询实际尝试登录的用户的存在和有效性。可以在Omniauth配置中设置服务帐户凭据,然后您可以像使用任何其他omniauth方法一样使用omniauth-ldap。 / p>