devise是ruby on rails框架中,一个非常灵活的认证解决包。地址:https://github.com/plataformatec/devise
里面有比较详细的安装和使用方法,新手也能很快完成用户认证功能的添加。如果想使用ldap进行统一认证的话,还需要安装额外的GEM包(devise_ldap_authenticatable),地址:https://github.com/cschiewek/devise_ldap_authenticatable
devise_ldap_authenticatable的安装非常顺利,但具体配置LDAP的时候遇到很多问题,最主要的问题还是对LDAP配置不熟悉,这里分享一些经验:
1. 由于公司的LDAP不允许匿名查询,所以将config/initializers/devise.rb中ldap_use_admin_to_bind设置为true
2. 修改config/ldap.yml,环境配置的内容如下:
development: host: 10.1.1.1 port: 389 attribute: mail base: OU=xxx,DC=xxx,DC=net admin_user: companynoops-ldap #注意单斜线 admin_password: password&123456 ssl: false
3. ldap_create_user默认为false,需要在user表中创建允许登陆的用户名。设置为true,则所有合法的LDAP都可以登陆。
另,提供一个LDAP查询的ruby程序,验证LDAP查询参数是否正确,如下:
require 'net/ldap' ldap = Net::LDAP.new({:host => '10.1.1.1',:port => 389, :base => 'OU=xxx,DC=xxx,DC=net', :auth => {:method => :simple, :username => "company\noops-ldap", #注意双斜线 :password => "password&123456" } } ) filter = Net::LDAP::Filter.eq( "mail", "username@xxx.com" ) ldap_entry = nil ldap.search(:filter => filter ) {|entry| ldap_entry = entry} p ldap_entry.dn unless ldap_entry.nil? ldap.auth(ldap_entry.dn, 'user password') if ldap.bind p 'auth pass' else p 'auth fail' end
1
转载请注明:爱开源 » rails 使用devise和ldap认证