2016-10-03 12 views
0

У меня перед проблемой необходимо как можно скорее решить эту проблему, если вам нужна ваша помощь.Java LDAP - не удалось выполнить проверку подлинности пользователей

У меня есть очень простая программа Java только для проверки подлинности образца пользователя Ldap

Выпуск -1 -:

public static void main(String[] args) throws NamingException { 

     final String ldapAdServer = "ldap://0.0.0.0:389"; 


     final String ldapUsername = "uid=test,ou=People,dc=example,dc=com"; 
     final String ldapPassword = "gdyb21LQTcIANtvYMT7QVQ=="; 


     Hashtable<String, Object> env = new Hashtable<String, Object>(); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     if (ldapUsername != null) { 
      env.put(Context.SECURITY_PRINCIPAL, ldapUsername); 
     } 
     if (ldapPassword != null) { 
      env.put(Context.SECURITY_CREDENTIALS, ldapPassword); 
     } 
     env.put(Context.INITIAL_CONTEXT_FACTORY, 
       "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL, ldapAdServer); 

     env.put("java.naming.ldap.attributes.binary", "objectSID"); 
     DirContext ctx = new InitialDirContext(env); 

    } 

выполнения выше программы дает «[LDAP: код ошибки 49 - Invalid Полномочия]»ошибка также я взял экспорт пользователей LDAP и Парольпользователя такой же, как вошел в программу

dn: uid=test,ou=People,dc=example,dc=com objectClass: person objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: top uid: test mail: [email protected] userPassword: {MD5}gdyb21LQTcIANtvYMT7QVQ==

Тот же пароль, который я ввел выше, и код java еще раз бросает ошибку. Я использовал dsconfig и настроил «схему по умолчанию-пароль-хранилище» для использования MD5, и тот же хорошо работает, когда я просто даю простой пароль, но мне нужно введите пароль MD5 hex в ldap, чтобы получить аутентификацию.

проблемные 2: мы используем Liferay в качестве серверной системы и все пользователи деталь должна храниться в LDAP, если пользователь меняет пароль Liferay генерирует пароль с помощью MD5 и шестигранных кодирований что-то вроде этого «098f6bcd4621d373cade4e832627b4f6 », но когда то же самое при экспорте с использованием опции экспорта ldiff, мы что-то вроде этого в ldap "{MD5} gdyb21LQTcIANtvYMT7QVQ ==" существует несоответствие между паролем, генерируемым liferay и ldap. Мне нужен пароль ldap для liferay md5. Снова ввод того же пароля, полученного в форме ldiff-файла, и помещение его в программу java, похоже, не работает, и работает простой текстовый пароль.

Нужна серьезная помощь в этом.

Пожалуйста, не стесняйтесь, если на них требуется дополнительная информация.

ответ

3

В коде нет ничего плохого. Проблема в том, что OpenDJ ожидает прозрачный текстовый пароль вместо хэшированного значения (это то, что вы используете).

Когда OpenDJ получает запрос на привязку (запрос привязки как аутентификации пользователей с сервером LDAP) он будет захватывать пароль из запроса, вычисление значения хэша, и сравнить его с значением, хранящимся в Парольпользователе атрибута (gdyb21LQTcIANtvYMT7QVQ == в вашем случае). Обратите внимание, что OpenDJ добавляет хеш-алгоритм, который использовался первоначально (MD5, SHA1 и т. Д.).

Таким образом, используя четкие текстовые пароли, необходимо исправить Выпуск 1.

Вышеуказанное объяснение также должно принести некоторый свет относительно того, что вызывает Выпуск 2. Liferay передает хеш пароля при изменении атрибута user0rus. в OpenDJ. Однако OpenDJ считает, что он получает четкое текстовое значение, поэтому он снова хэширует пароль. Таким образом, вы получаете пароль «двойной хеширования» на вашем сервере LDAP.

У вас есть два варианта исправления Выпуск 2:

  • Отключить хэширования в Liferay и пусть OpenDJ сделать хэширования.
  • Разрешить предварительно закодированные пароли в LDAP и настроить Liferay для передачи значения пароля в двоичном формате. Чтобы разрешить предварительно закодированные пароли, вам необходимо установить только предопределенное предопределенное пароли : - свойство передовой политики пароля - true. Боюсь, я не могу помочь вам в настройке Liferay.
+0

Приветствую вас за немедленный ответ на проблему 1, у нас уже есть более 40 миллионов пользователей, которые должны быть импортированы из liferay db в ldap, и теперь их пароль будет хэширован. Как мне обрабатывать этот сценарий liferay использует MD5 с шестнадцатеричным для двоичного формата вы имеете в виду кодировку базы 64? – ravicandy1234