最新消息:

rails 使用devise和ldap认证

ruby admin 5232浏览 0评论

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认证

您必须 登录 才能发表评论!