Как узнать правильные параметры ldap
в настоящее время я работаю над небольшим проектом с Active Directory и некоторыми материалами LDAP... Я пытаюсь подключиться к серверу LDAP, и он всегда дает мне ту же ошибку:
[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1
насколько я знаю, это означает, что учетные данные неверны, но я на 100% уверен, что они правы! Может быть, я забыл какой-то параметр?
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://libertycity.ch:389/dc=libertycity,dc=ch");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.SECURITY_PRINCIPAL, "uid=" + username + ",ou=Users");
env.put("java.naming.ldap.attributes.binary", "objectSID");
DirContext ctx = new InitialDirContext(env);
Я думаю, что мой код выглядит правильно, или я что-то пропустил? В чем может быть проблема и как я могу это узнать?
6 ответов
значение "data 52e", указанное в ошибке, означает, что привязка не удалась из-за: Возвращает, когда имя пользователя допустимо, но пароль / учетные данные недопустимы.
http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors
эта проблема также может возникнуть, если полный домен не включен в имя пользователя.
установите Принципал безопасности как username@domain
.
InitialLdapContext ldapContext = new InitialLdapContext();
ldapContext.addToEnvironment(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapContext.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
ldapContext.addToEnvironment(Context.SECURITY_PRINCIPAL, userId + "@mydomain.com");
ldapContext.addToEnvironment(Context.SECURITY_CREDENTIALS, password);
ldapContext.addToEnvironment(Context.PROVIDER_URL, "ldap://" + ldapHost + ":" + ldapPort);
У меня были проблемы с попыткой защитить соединение от wildfly к серверу Microsoft active directory, основная проблема заключается в том, что я не знаю, какая строка подключения должна быть.
Если вы установите "Active Directory Explorer" из Sysinternals взял комплект, предоставленный Microsoft. Поиск объекта, к которому вы хотите привязаться, будет отображаться параметр " путь:". Это строка значений,которые необходимо процитировать в аргументе контексту.SECURITY_PRINCIPAL значение.
В моем случае строка пути имела формат
СN=Фред блогов,ОУ=ХХХ пользователи,DC=ФОО-бар в,dc=com,и ХХХ.фу-бар.ком:389 [xxx.foo-bar.com]]
требуемым аргументом будет
"СN=Фред блогов,ОУ=ХХХ пользователи,DC=ФОО-бар в,dc=com"и
Пожалуйста, обратите внимание, что пробелы очень важны
код ошибки LDAP 49 указывает на "недопустимые учетные данные", что означает, что пароль, отправленный на сервер LDAP, был неправильным.
Active Directory: Проверьте контейнеры домена.
у меня была такая же ошибка при миграции из eDirectory в Active Directory, имя пользователя и пароль казались правильными, но по какой-то причине я все еще получал ошибку "52e", которая указывает, что пароль неверен.
мне пришлось добавить DC (контейнеры домена) к принципалу, чтобы заставить его работать:
не работает:
env.put(Context.SECURITY_PRINCIPAL, "CN="+username+",OU=Users,OU=Org,OU=ETC");
добавление DCs: (это сработало для me)
env.put(Context.SECURITY_PRINCIPAL, "CN="+username+",OU=Users,OU=Org,OU=ETC,DC=yourorg,DC=com");
это решило проблему для меня для Active Directory.
что-то, что действительно помогло мне решить эту проблему, пыталось связать с помощью команды Linux ldapbind / ldapsearch https://docs.oracle.com/cd/B10501_01/network.920/a96579/comtools.htm.
Если вы заставите его работать из ОС с помощью команд ldapbind / ldapsearch, вы узнаете, какие точные параметры вы должны использовать в своем коде.
ldapcontext взаимодействует через DirContext;
Hashtable<String, String> ldapEnv = new Hashtable<String, String>(11);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
//ldapEnv.put(Context.PROVIDER_URL, "ldap://societe.fr:389");
ldapEnv.put(Context.PROVIDER_URL, "ldap://10.112.115.14:389");
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, "vmware-china@viewconnection.com");
ldapEnv.put(Context.SECURITY_CREDENTIALS, "ca$hc0w");
//ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
//ldapEnv.put(Context.SECURITY_PROTOCOL, "simple");
ldapContext = new InitialDirContext(ldapEnv);
System.out.println(ldapContext);
// Create the search controls
SearchControls searchCtls = new SearchControls();
//Specify the attributes to return
String returnedAtts[]={"sn","givenName", "samAccountName", "mail"};
searchCtls.setReturningAttributes(returnedAtts);
//Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//specify the LDAP search filter
String searchFilter = "(&(objectClass=user)(mail=*))";
//Specify the Base for the search
String searchBase = "DC=VIEWCONNECTION, DC=COM";
//initialize counter to total the results
int totalResults = 0;
// Search for objects using the filter
NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls);
//Loop through the search results
while (answer.hasMoreElements())
{
SearchResult sr = (SearchResult)answer.next();
totalResults++;
System.out.println(">>>" + sr.getName());
Attributes attrs = sr.getAttributes();
System.out.println(">>>>>>" + attrs.get("samAccountName"));
}
System.out.println("Total results: " + totalResults);
ldapContext.close();