Запрос к LDAP на сервере WIndows для получения пользователя Active Directory - PullRequest
0 голосов
/ 18 октября 2018

У меня настроены AD DS и AD LDS в Windows 2012 Server.

Требуется запросить LDAP с использованием Java.

Я пробовал это:

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://55.22.44.22:53358");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
"CN=ecode,CN=Users,DC=ecode,DC=com");
env.put(Context.SECURITY_PRINCIPAL, "ecode@ecode.com");
env.put(Context.SECURITY_CREDENTIALS, "ddadadad");

DirContext context = new InitialDirContext(env);

Я получаю следующую ошибку

Исключение в потоке "main" javax.naming.AuthenticationException: [LDAP: код ошибки 49 - 8009030C: LdapErr: DSID-0C09042F, комментарий: ошибка AcceptSecurityContext, данные 2030,v2580�]
в com.sun.jndi.ldap.LdapCtx.mapErrorCode (LdapCtx.java:3154)
в com.sun.jndi.ldap.LdapCtx.processReturnCode (LdapCtx.java:3100) * 1013на com.sun.jndi.ldap.LdapCtx.processReturnCode (LdapCtx.java:2886)
на com.sun.jndi.ldap.LdapCtx.connect (LdapCtx.java:2800) на com.sun.jndi.ldap.LdapCtx. (LdapCtx.java:319) по адресу com.sun.jndi.ldap.LdapCtxFactory.getUsingURL (LdapCtxFactory.java:192) по адресу com.sun.jndi.ldap.LdapCtxFactory.getUsingURLt.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance (LdapCtxFactory.java:153) в com.sun.jndi.ldap.LdapCtxFactory.getInitialContext (LdapCtxFactory.java:83)

Я знаю, что код 49 это LDAP_INVALID_CREDENTIALS.Я не уверен, что передать в параметре SECURITY_AUTHENTICATION.

Я попытался ввести в качестве параметра SECURITY_AUTHENTICATION:

CN=ecode,CN=Users,DC=ecode,DC=com
ecode@ecode.com

В Powershell при попытке

dsquery user -name ecode 

Я получаю этот вывод

CN=ecode,CN=Users,DC=ecode,DC=com

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Это в основном то, что я успешно использую как с Active Directory, так и с несколькими чистыми серверами LDAP - пятая строка не верна;но непревзойденные круглые скобки не должны компилироваться, поэтому я предполагаю, что это проблема копирования / вставки, а строка фактически комментирует другой формат идентификатора входа, который вы пробовали.

Существует три параметра для SECURITY_PRINCIPAL, поскольку реализация LDAP в Active Directory позволяет связывать с userPrincipalName ( dsquery user -o upn -name ecode ), sAMAccountName (домен \)logonID но dsquery user -o samid -name ecode по какой-то причине возвращает только компонент logonID sAMAccountName) или полностью определенное DN ( пользователь dsquery-o dn -name ecode ).

Если вы подтвердили, что используемый вами идентификатор соответствует одному из них, проверьте, увеличивается ли количество неверных паролей.Количество неверных паролей не является реплицированным атрибутом;если у вас более одного контроллера домена, выберите тот, который используется в вашем соединении LDAP.Если счетчик увеличивается, значит, у вас есть правильный security_principal, и пароль отклоняется (неверный пароль или, возможно, заблокированная учетная запись)

dsquery * "Fully-Qualified-DN-Here" -scope base -attr badPwdCount -s DomainControllerUsedInLDAPBind
0 голосов
/ 18 октября 2018

Я не Java-разработчик (по крайней мере, не в последнее время), но согласно примерам здесь , вы должны делать что-то вроде этого:

env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "CN=ecode,CN=Users,DC=ecode,DC=com");
env.put(Context.SECURITY_CREDENTIALS, "ddadadad");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...