Столкнулся с необходимостью авторизоваться через LDAP.
Первое:
Нужно установить gem который это умеет делать, в моем случае это net-ldap.
Второе:
Для авторизации через LDAP нужен не логин, как я думал и что стало для меня неожиданностью, а Distinguished Name. Поэтому сначала необходимо его найти в 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
Комментариев нет:
Отправить комментарий