2010-08-21 3 views
4

Rails에서 작동하도록 LDAP 인증을 얻으려고합니다. 네이티브 Ruby LDAP 라이브러리이므로 net/ldap을 선택했습니다.Rails net/ldap을 사용하여 LDAP 로그인

나는 가능한 모든 것을 시도했는데, 특별히 http://net-ldap.rubyforge.org/classes/Net/LDAP.html의 예제를 시도했지만 여전히 작동하지 않습니다. 아이디어가 있으십니까? 내가 인증을 위해 LDAP를 사용하여 레일 3의 Devise 플러그인 작업

+0

첫번째 생각 : 몇 가지 코드 :-)를 붙여 코드가하는 일도 훌륭합니다. – Chris

답변

8

내가 도달하기 위해 관리하는 가장 좋은 방법은 다음과 모델은 다음과 같습니다

require 'net/ldap' 

class User < ActiveRecord::Base 

    def after_initialize 
    @config = YAML.load(ERB.new(File.read("#{Rails.root}/config/ldap.yml")).result)[Rails.env] 
    end 

    def ldap_auth(user, pass) 
    ldap = initialize_ldap_con 
    result = ldap.bind_as(
     :base => @config['base_dn'], 
     :filter => "(#{@config['attributes']['id']}=#{user})", 
     :password => pass 
    ) 
    if result 
     # fetch user DN 
     get_user_dn user 
     sync_ldap_with_db user 
    end 
    nil 
    end 

    private 
    def initialize_ldap_con 
    options = { :host => @config['host'], 
       :port => @config['port'], 
       :encryption => (@config['tls'] ? :simple_tls : nil), 
       :auth => { 
        :method => :simple, 
        :username => @config['ldap_user'], 
        :password => @config['ldap_password'] 
       } 
       } 
    Net::LDAP.new options 
    end 

    def get_user_dn(user) 
    ldap = initialize_ldap_con 
    login_filter = Net::LDAP::Filter.eq @config['attributes']['id'], "#{user}" 
    object_filter = Net::LDAP::Filter.eq "objectClass", "*" 

    ldap.search :base => @config['base_dn'], 
       :filter => object_filter & login_filter, 
       :attributes => ['dn', @config['attributes']['first_name'], @config['attributes']['last_name'], @config['attributes']['mail']] do |entry| 
     logger.debug "DN: #{entry.dn}" 
     entry.each do |attr, values| 
     values.each do |value| 
      logger.debug "#{attr} = #{value}" 
     end 
     end 
    end 
    end 
end 
+0

sync_ldap_with_db? – parzival

5

, 당신은 몇 가지 아이디어를 얻을 수있는 소스를 볼 수 있습니다, 그것은 현재 순 - LDAP 0.1.1을 사용

http://github.com/cschiewek/devise_ldap_authenticatable

연결 및 LDAP의 단절에 인증 실제가에 실시하는 것이 최적입니다

http://github.com/cschiewek/devise_ldap_authenticatable/blob/master/lib/devise_ldap_authenticatable/ldap_adapter.rb

마지막으로, 당신은 내가 테스트를 실행하는 데 사용하는 레일 3 응용 프로그램을 샘플 LDAP 서버 설정을보고 할 수 있습니다 에 대하여 :

앱 : http://github.com/cschiewek/devise_ldap_authenticatable/tree/master/test/rails_app/

서버 : http://github.com/cschiewek/devise_ldap_authenticatable/tree/master/test/ldap/

+0

글쎄,이게 내가 솔루션을 형성하는 데 도움이되었다. –

관련 문제