设计LDAP无法找到用户,但登录正常

时间:2017-02-14 02:41:59

标签: ruby-on-rails ruby devise ldap

因此,当我使用devise_ldap_authenticatable gem授权用户时,我会收到以下记录信息:

  LDAP: LDAP dn lookup: sAMAccountName=john.smith
  LDAP: LDAP search for login: sAMAccountName=john.smith
  LDAP: LDAP search yielded 0 matches
  LDAP: Authorizing user lt\john.smith

据我了解,搜索无法返回用户,我希望找到该用户,以便根据LDAP字段(主要是department)设置其他属性。

我已经检查过此搜索应该可以使用以下rake任务:

desc "LDAP Test"
  task ldap: :environment do
    ldap = Net::LDAP.new :host => ENV['LDAP_IP'],
                         :port => ENV['LDAP_PORT'],
                         :encryption => :simple_tls,
                         :base => ENV['LDAP_BASE'],
                         :auth => {
                             :method => :simple,
                             :username => ENV['LDAP_LOGIN'],
                             :password => ENV['LDAP_PASSWORD']
                         }
    if ldap.bind
      ldap.search(:base => ENV['LDAP_BASE'], :filter => Net::LDAP::Filter.eq("sAMAccountName", "john.smith"), :attributes => ["sAMAccountName", "department"], :return_result => false) do |entry|
        entry.each do |attr, values|
          puts "#{attr}: #{values.first}"
        end
      end
    else
      puts "Connection failed!  Code:  #{ldap.get_operation_result.code}, message: #{ldap.get_operation_result.message}"
    end
  end

返回:

dn: CN=John Smith,OU=Temporary Staff,OU=Users,DC=lt,DC=local
department: Bioinformatics
samaccountname: Johh.Smith

有谁知道登录搜索失败的原因?我的配置文件如下:

devise.rb:

# ==> LDAP Configuration 
  config.ldap_logger = true
  config.ldap_create_user = true
  config.ldap_update_password = false
  # config.ldap_config = "#{Rails.root}/config/ldap.yml"
  config.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "lt\\#{login}"}
  # config.ldap_check_group_membership = false
  # config.ldap_check_attributes = false
  config.ldap_use_admin_to_bind = true

ldap.yml:

development:
  host: <%= ENV['LDAP_IP'] %>
  port: <%= ENV['LDAP_PORT'] %>
  attribute: sAMAccountName
  base: <%= ENV['LDAP_BASE'] %>
  admin_user: <%= ENV['LDAP_LOGIN'] %>
  admin_password: <%= ENV['LDAP_PASSWORD'] %>
  ssl: true
  # <<: *AUTHORIZATIONS

1 个答案:

答案 0 :(得分:0)

我会使用像Wireshark这样的数据包嗅探器来查看rake任务与设计中的LDAP请求之间的区别。 UnboundID LDAP SDK for Java还附带了一个名为LDAPDebugger的工具,您可以将其用作应用和Active Directory之间的代理来解码流量。

我希望这会有所帮助。