我正在Rails应用程序中针对LDAP服务器进行身份验证, 下面的代码在本地运行,但不能在服务器上运行。
在服务器上,尝试登录应用程序时会抛出Net::LDAP::BindingInformationInvalidError (Invalid binding information)
,但通过控制台工作
我对Ruby还是很陌生,无法找到调试它的正确方法。我知道LDAP配置正确,因为我可以从控制台或本地开发环境进行身份验证和绑定。试图将:verbose => true
传递给LDAP构造函数,但没有效果...
require 'net/ldap'
require 'devise/strategies/authenticatable'
module Devise
module Strategies
class LdapAuthenticatable < Authenticatable
def authenticate!
if params[:user]
ldap = Net::LDAP.new :host => 'XX.XX.XX.XX',
:port => 636,
:connect_timeout => 5,
:base => 'CN=Configuration,DC=internal,DC=XX,DC=XX',
:encryption => {
:method => :simple_tls
},
:auth => {
:method => :simple,
:username => ENV['LDAP_USER'],
:password => ENV['LDAP_PASSWORD']
}
result = ldap.bind_as(:base => "OU=Users,OU=XX,DC=XX,DC=XX,DC=XX",
:filter => "(userPrincipalName=#{email})",
:password => password,
)
if result
user = User.find_by(email: email)
success!(user)
else
return fail(:invalid_login)
end
end
end
def email
params[:user][:email]
end
def password
params[:user][:password]
end
end
end
end
Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable)
原来是未读取的ENV变量。
答案 0 :(得分:0)
也许该帐户未被授权?听起来问题出在绑定配置中:base => "OU=Users,OU=XX,DC=XX,DC=XX,DC=XX"
遇到此错误的其他用户的更多信息: