为什么ldap绑定在服务器上失败?

时间:2019-03-20 09:31:59

标签: ruby-on-rails ruby ldap

我正在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变量。

1 个答案:

答案 0 :(得分:0)

也许该帐户未被授权?听起来问题出在绑定配置中:base => "OU=Users,OU=XX,DC=XX,DC=XX,DC=XX"

遇到此错误的其他用户的更多信息: