Подключиться к Active Directory через LDAP-Ruby

Я пытаюсь подключиться к экземпляру AD из своего приложения Ruby. Я выбрал LDAP для работы.

Ниже приведены мои настройки подключения и сценарий, который я написал.

 def name_for_login( email, password )
  email = email[/\A\w+/].downcase  # Throw out the domain, if it was there
  email << "@example.com"        # I only check people in my company
  ldap = Net::LDAP.new(
    host: '10.0.0.2',
    port: 1027,
    auth: { method: :simple, email: email, password:password }
  )
  if ldap.bind
  p 'lol'
    # Yay, the login credentials were valid!
    # Get the user's full name and return it
    ldap.search(
      base:         "OU=Users,OU=Accounts,DC=example,DC=com",
      filter:       Net::LDAP::Filter.eq( "mail", email ),
      attributes:   %w[ displayName ],
      return_result:true
    ).first.displayName.first
  end
end

и тестовые учетные данные:

  1. окна : Windows@тест
  2. тестер: Pass@123

Если я запускаю скрипт, он выдает следующую ошибку:

irb(main):025:0> name_for_login('tester','Pass@123')
Net::LDAP::BindingInformationInvalidError: Invalid binding information
    from /Library/Ruby/Gems/2.3.0/gems/net-ldap-0.16.1/lib/net/ldap/auth_adapter/simple.rb:14:in `bind'
    from /Library/Ruby/Gems/2.3.0/gems/net-ldap-0.16.1/lib/net/ldap/connection.rb:278:in `block in bind'
    from /Library/Ruby/Gems/2.3.0/gems/net-ldap-0.16.1/lib/net/ldap/instrumentation.rb:19:in `instrument'
    from /Library/Ruby/Gems/2.3.0/gems/net-ldap-0.16.1/lib/net/ldap/connection.rb:275:in `bind'
    from /Library/Ruby/Gems/2.3.0/gems/net-ldap-0.16.1/lib/net/ldap.rb:868:in `block in bind'
    from /Library/Ruby/Gems/2.3.0/gems/net-ldap-0.16.1/lib/net/ldap/instrumentation.rb:19:in `instrument'
    from /Library/Ruby/Gems/2.3.0/gems/net-ldap-0.16.1/lib/net/ldap.rb:860:in `bind'
    from (irb):9:in `name_for_login'
    from (irb):25
    from /usr/bin/irb:11:in `<main>'

Я не знаю, где искать и устранять неполадки, чтобы понять проблему.

AD находится на сервере Windows, размещенном в Azure.


person Ninja Boy    schedule 29.10.2018    source источник


Ответы (1)


Я не знаю Ruby, но я предполагаю, что проблема здесь:

auth: { method: :simple, email: email, password:password }

Согласно документации, вы должны использовать свойство username , а не email. И вам нужно установить его либо на имя пользователя (sAMAccountName) учетной записи, либо на userPrincipalName (который может совпадать с адресом электронной почты, либо на distinguishedName.

Предполагая, что userPrincipalName совпадает с адресом электронной почты, это может сработать:

auth: { method: :simple, username: email, password:password }
person Gabriel Luci    schedule 29.10.2018
comment
Каков общий формат для следующего объявления? Имя пользователя, пароль и HOST. Я видел несколько сообщений, и там нет структурированного формата. Существует ли конкретная рабочая схема, которая работает для LDAP-AD? - person Ninja Boy; 29.10.2018
comment
Хост - это просто имя сервера или IP. Пароль — ваш пароль; там ничего особенного. И имя пользователя - это то, что я описал в своем ответе. - person Gabriel Luci; 29.10.2018
comment
Имя пользователя для соединений AD LDAP должно иметь следующий формат: sAMAccountName@domain. Для вашего примера это будут [email protected] и [email protected]. - person Jason; 29.10.2018