2014-10-13 2 views
0

фонАутентифицировать против конкретного атрибута в OpenLDAP

Еще одна команда в нашей организации есть полностью настроенный сервер Active Directory. Моя команда создает приложения Ruby on Rails и мы аутентифицируем пользователей наших веб-приложений против их настройки. Из-за некоторых новых политик безопасности, которые внедряются, наши машины разработки больше не смогут напрямую разговаривать с рабочими серверами. В результате я пытаюсь установить OpenLDAP на свой локальный компьютер (работает Fedora) и использовать его для проверки подлинности пользователей при разработке.

Настройка

Я был в состоянии полностью настроить OpenLDAP и вставить запись. Моя база данных выглядит следующим образом:

dc=dev,dc=com 
    ou=Users 
      cn=User 1 

Внутри cn=User 1 записи, у меня есть атрибут accountName и у меня есть стандартный userPassword атрибут. В качестве теста я загрузил браузер LDAP, и я могу успешно пройти аутентификацию, когда я указываю полное DN (cn = User 1, ou = Users, dc = dev, dc = com) и укажу пароль, который находится в поле userPassword ,

Вопрос

В нашей производственной среде, все, что я должен дать для проверки подлинности является базовым DN (dc = DEV, DC = COM), значение для accountName и связанный с ним пароль. Как только я аутентифицируюсь, я могу получить доступ к другим полям в записи User 1. Что мне нужно сделать для аутентификации с использованием поля accountName вместо полного DN?

ответ

1

Есть две вещи, чтобы адрес здесь:

Во-первых, если ваша рабочая среда является ActiveDirectory, и вы не можете получить доступ к нему с вашей рабочей станции разработчика, попросите команду отвечает среды AD, чтобы создать " dev ", к которым вы можете получить доступ.

В то время как основные понятия LDAP стандартизированы, конкретные детали реализации будут сильно различаться между AD и OpenLDAP.


Во-вторых - способ, которым наиболее^программное обеспечение способно для аутентификации LDAP, используя только имя пользователя и пароль, таким образом:

  1. Пользователь: отправляет форму (Интернет, родное приложение, независимо от) с их именем и паролем
  2. Процесс входа: привязывается к LDAP-серверу либо анонимно, либо с фиксированным DN и учетной записью службы.
  3. Процесс входа в систему: поиск LDAP для предоставленного имени пользователя, соответствующий атрибутам, когда-либо соответствующим для среды (например, «accountName» в вашем случае)
  4. Процесс входа в систему: выбор DN найденной записи (если есть)
  5. Процесс входа: попытки аутентифицированного связывания с использованием извлеченного DN и поставленного пароля с шага 1.

Edit:

^В некоторых ситуациях имя пользователя поставляемая компонента значение РДН пользователя, например, если мой логин - stephenr, RDN моего пользователя может быть cn = stephenr. Если это так, и все пользовательские записи имеют один и тот же родительский объект, DN для аутентификации (этап 5 выше) может быть создан только путем создания строки, например. «cn = {userid}, ou = users, dc = example, dc = com», где {userid} заменяется указанным значением имени пользователя на этапе 1.

+0

Спасибо. Это было очень полезно, и мы закончили тем, что использовали это, чтобы сделать предварительный тест, чтобы узнать, заблокирована ли учетная запись. Если кто-либо использует подобную среду разработки, существует несколько иной подход, который позволит вам сэкономить вам вызов на сервер LDAP. Поскольку структура DN известна в среде разработки, вы можете динамически строить строку DN, когда находитесь в режиме разработки, а затем просто используете обычное имя пользователя при запуске в режиме производства. Рельсы, в частности, делают это проще, так как вы можете спросить Rails, если он запускает dev или prod. – CodeSmith

+0

Да, в некоторых средах (даже в средах prod) вполне приемлемо создавать DN только из имени пользователя, если структура известна как «статическая». это то, на что ссылается сноска в моем ответе. Я рад, что ты заработал! – Stephen

Смежные вопросы