如何用LDAP进行Ruby on Rails认证?

我正在开发一个Web应用程序,我有一个使用bcrypt gem的身份validation方法它工作正常,但我想将身份validation方法更改为LDAP,因为我正在使用Intranet环境并希望我的用户能够使用Windows登录证书。

我正在寻找使用net-ldap gem但我无法在网上找到关于如何在我的Web应用程序中实现这一点的任何好的总结/解释。

  • 你能帮我解决这个问题吗?
  • 我怎样才能做到这一点?

这是我过去用来进行多服务器LDAP检查的实用程序类:

 require 'net/ldap' # Ldap.authenticate('user', 'password') # => `true` if valid # => `false` if invalid # => `nil` if LDAP unavailable class Ldap def self.config { domain: 'mydomain', servers: ['server1', 'server2'] } end def self.authenticate(login, pass) return false if login.empty? or pass.empty? config['servers'].each do |server| auth = authenticate_against_server(login, pass, server, config['domain']) return auth unless auth.nil? end nil end private def self.authenticate_against_server(login, pass, host, domain) conn = Net::LDAP.new( host: host, port: 636, base: "dc=#{domain}, dc=local", encryption: :simple_tls, auth: { username: "#{login}@#{domain}.local", password: pass, method: :simple } ) Timeout::timeout(15) do return conn.bind ? true : false end rescue Net::LDAP::LdapError => e notify_ldap_admin(host, 'Error', e) return nil rescue Timeout::Error => e notify_ldap_admin(host, 'Timeout', e) return nil end def self.notify_ldap_admin(host, error_type, error) msg = "LDAP #{error_type} on #{host}" RAILS_DEFAULT_LOGGER.debug(msg) DeveloperMailer.deliver_ldap_failure_msg(msg, error) end end 

如果你是新手,我会避免自制认证。 退房

  • 用LDAP设计: https : //github.com/cschiewek/devise_ldap_authenticatable
  • Omniauth w / LDAP: https : //github.com/intridea/omniauth-ldap

我开始使用Devise,并且仍然将它用于一些项目,但Omniauth在我看来是超级强大且更通用的。 你必须自己做更多。

进一步阅读应包括CanCanCan在您的应用程序内进行授权,除非每个人都获得所有内容。