Я пытаюсь написать скрипт на Ruby, который проверяет, действительны ли учетные данные пользователя на активном сервере каталогов.Вот что я пробовал до сих пор:
require 'rubygems'
require 'net-ldap'
host = '10.4.1.6'
port = 389
username = 'username'
password = 'password'
ldap = Net::LDAP.new
ldap.host = host
ldap.port = port
ldap.auth "CN=#{username},CN=Users,DC=companyname,DC=ad", password
if ldap.bind
puts 'YES!'
puts ldap.get_operation_result.message
else
puts 'NO :-('
puts ldap.get_operation_result.message
end
Если я введу несуществующее имя пользователя и пустую строку в качестве пароля, операция связывания завершится успешно.Если я ввожу правильное имя пользователя и действительный / недействительный / пустой пароль, операция связывания завершается с ошибкой «Неверные учетные данные».
Я просмотрел другие потоки и прочитал документацию по net-ldap, но не могуне понимаю, что я делаю не так.
Может кто-нибудь подсказать, как этого добиться?
Заранее благодарен за любые ответы: -)
Редактировать:
Как и предполагал @StuartEllis, проблема была в идентификаторе пользователя.Чтобы выяснить правильный DN, я использовал следующий скрипт (взятый из документации net-ldap):
ldap.auth "CN='adminUser',CN=Users,DC=companyname,DC=ad", 'adminUserPwd'
ldap.bind
treebase = "DC=companyname,DC=ad"
filter = Net::LDAP::Filter.eq( "mail", "username@companyname.com" )
attrs = ["mail", "cn", "sn","objectclass"]
ldap.search( :base => treebase, :filter => filter, :attributes => attrs, :return_result => false ) do |entry|
puts entry._dump 0
end
Затем я повторил попытку, используя свой оригинальный скрипт (выше), с полученным DN и вуаля!