Omniauth-ldap 无效凭证
Omniauth-ldap invalid credentials
我很难让 omniauth-ldap 与我们的 AD 服务器正常工作,我相信这是因为我们的用户名中包含我们的域名。
这将成功连接到我们的 ldap 服务器:
ldapsearch -h ldap.ourdomain.com -b "dc=ourdomain,dc=int" -D "OURDOMAIN\username" -w <password> '(sAMAccountName=username)'
但是,OmniAuth 中的这些设置只会导致 "invalid credentials"
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"
更新
进一步研究,我发现如果未设置 :bind_dn 和 :password,omniauth-ldap 会将绑定方法设置为 :anonymous。
但是,如果设置了值 ,它不会插入用户名并且不会提供用户输入的密码。
我需要的是
:bind_dn => 'OURDOMAIN\<user entered username>',
:password => <user entered password>
但是密码和输入的用户名只有在硬编码时才会提供给连接。
这主要是因为 omniauth-ldap 的设计选择。
设计是用户提供的用户名(电子邮件或 ID)不足以构建可用于绑定的 DN(专有名称)。因此,omniauth ldap 所做的是
- 调用 ldap 搜索(bind_dn 如果您的 AD/LDAP 不允许匿名搜索,则使用密码)为用户提取 DN。
- 然后使用步骤 1 中的 DN 和用户输入的密码绑定到 LDAP/AP。
我认为步骤 1) 是不必要的。大多数 DN 可以从用户名派生。
我必须通过创建服务帐户来解决这个问题。该帐户登录然后查询实际尝试登录的用户的存在和有效性。服务帐户凭据可以在您的 Omniauth 配置中设置,然后您可以像使用任何其他 omniauth 方法一样使用 omniauth-ldap。
我很难让 omniauth-ldap 与我们的 AD 服务器正常工作,我相信这是因为我们的用户名中包含我们的域名。
这将成功连接到我们的 ldap 服务器:
ldapsearch -h ldap.ourdomain.com -b "dc=ourdomain,dc=int" -D "OURDOMAIN\username" -w <password> '(sAMAccountName=username)'
但是,OmniAuth 中的这些设置只会导致 "invalid credentials"
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"
更新
进一步研究,我发现如果未设置 :bind_dn 和 :password,omniauth-ldap 会将绑定方法设置为 :anonymous。
但是,如果设置了值 ,它不会插入用户名并且不会提供用户输入的密码。
我需要的是
:bind_dn => 'OURDOMAIN\<user entered username>',
:password => <user entered password>
但是密码和输入的用户名只有在硬编码时才会提供给连接。
这主要是因为 omniauth-ldap 的设计选择。 设计是用户提供的用户名(电子邮件或 ID)不足以构建可用于绑定的 DN(专有名称)。因此,omniauth ldap 所做的是
- 调用 ldap 搜索(bind_dn 如果您的 AD/LDAP 不允许匿名搜索,则使用密码)为用户提取 DN。
- 然后使用步骤 1 中的 DN 和用户输入的密码绑定到 LDAP/AP。
我认为步骤 1) 是不必要的。大多数 DN 可以从用户名派生。
我必须通过创建服务帐户来解决这个问题。该帐户登录然后查询实际尝试登录的用户的存在和有效性。服务帐户凭据可以在您的 Omniauth 配置中设置,然后您可以像使用任何其他 omniauth 方法一样使用 omniauth-ldap。