вторник, 26 апреля 2016 г.

Авторизация по LDAP в Ruby с использованием net-ldap

Столкнулся с необходимостью авторизоваться через LDAP.

Первое:
Нужно установить gem который это умеет делать, в моем случае это net-ldap.

Второе:
Для авторизации через LDAP нужен не логин, как я думал и что стало для меня неожиданностью, а Distinguished Name. Поэтому сначала необходимо его найти в LDAP по логину, а потом уже авторизоваться с его помощью и пароля.

Маленький пример:

require 'net/ldap'

  def ldap_search(ldap, login)
    filter = Net::LDAP::Filter.eq("uid", login)
    ldap.search(filter: filter ) do |entry|
      return entry.dn
    end
    ldap_response(ldap)
  end

  def ldap_auth(login, password)
    ldap = Net::LDAP.new
    ldap.host = ""
    ldap.port = 389
    ldap.base = "dc=company,dc=ru"
    dn = ldap_search(ldap, login) or return false
    ldap.auth(dn, password)
    ldap.bind or ldap_response(ldap)
  end
  
  def ldap_response(ldap)
    unless ldap.get_operation_result.code == 0
      puts "LDAP ERROR Code: #{ldap.get_operation_result.code}, Message: #{ldap.get_operation_result.message}"
      return false
    end
  end

Комментариев нет:

Отправить комментарий