Ответ 1
data 52e - Возвращает, когда имя пользователя действителен, но пароль/учетные данные недействительны.
Вам, вероятно, понадобится что-то вроде
String dn = "cn=" + userName + "," + "CN=Users," + base;
LDAP: код ошибки 49 - 80090308: LdapErr: DSID-0C0903A9, комментарий: Ошибка AcceptSecurityContext, данные 52e, v1db1
Я знаю, что код "52e" - это когда имя пользователя действительно, но пароль недействителен. Я использую то же имя пользователя и пароль в своей студии apache, что я смог установить соединение успешно в LDAP.
Вот мой код java
String userName = "*******";
String password = "********";
String base ="DC=PSLTESTDOMAIN,DC=LOCAL";
String dn = "cn=" + userName + "," + base;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://******");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, dn);
env.put(Context.SECURITY_CREDENTIALS, password);
LDAPAuthenticationService ldap = new LDAPAuthenticationService();
// LdapContext ctx;
DirContext ctx = null;
try {
ctx = new InitialDirContext(env);
Моя ошибка в этой строке: ctx = new InitialDirContext(env);
Я не знаю, что именно вызывает эту ошибку.
data 52e - Возвращает, когда имя пользователя действителен, но пароль/учетные данные недействительны.
Вам, вероятно, понадобится что-то вроде
String dn = "cn=" + userName + "," + "CN=Users," + base;
Для меня проблема решена, когда я устанавливаю главный раздел следующим образом:
env.put(Context.SECURITY_PRINCIPAL, [email protected]);
52e 1326 ERROR_LOGON_FAILURE Возвращает, когда имя пользователя действительно, но пароль/учетные данные недействительны. Будет предотвращено отображение большинства других ошибок, как указано.
http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors
Когда вы используете Context.SECURITY_AUTHENTICATION как "простой", вам нужно указать значение атрибута userPrincipalName (user @domain_base).
У меня была аналогичная проблема при использовании AD на CAS, то есть 52e ошибка. В моем случае приложение принимает полное имя, когда в виде CN = вместо фактического имени пользователя.
Например, если у вас есть пользователь с полным именем Ross Butler, а имя пользователя для входа в него - rbutler - вы обычно ставите что-то вроде: cn = rbutler, ou = Users, dc = domain, dc = com, но наши неудачные каждый раз. Изменяя это на cn = Ross Butler, ou = Users, dc = domain, dc = com, он прошел!!
В моем случае я должен использовать что-то вроде @для успешного входа в систему.
sample_user @sample_domain
Для меня проблема решена путем добавления доменного имени в имя пользователя следующим образом:
string userName="yourUserName";
string password="passowrd";
string hostName="LdapServerHostName";
string domain="yourDomain";
System.DirectoryServices.AuthenticationTypes option = System.DirectoryServices.AuthenticationTypes.SecureSocketsLayer;
string userNameWithDomain = string.Format("{0}@{1}",userName , domain);
DirectoryEntry directoryOU = new DirectoryEntry("LDAP://" + hostName, userNameWithDomain, password, option);
если вы отлаживаете и просматриваете ctx = null, возможно, у вас проблемы с именем пользователя, вы должны написать как "ac\administrator" (двойное "\") или "administrator @ac"
LDAP пытается аутентифицировать AD при отправке транзакции на другую серверную БД. Эта аутентификация завершается с ошибкой, поскольку пользователь недавно изменил свой пароль, хотя эта транзакция была сгенерирована с использованием предыдущих учетных данных. Эта проверка подлинности будет продолжаться до тех пор, пока... если вы не измените статус транзакции на "Завершить" или "Отменить", в этом случае LDAP перестанет отправлять эти транзакции.
Не могли бы вы расширить это? Что вы подразумеваете под изменением статуса транзакции, чтобы завершить или отменить.
Для меня проблема решается путем изменения envs следующим образом:
env.put("LDAP_BASEDN", base)
env.put(Context.SECURITY_PRINCIPAL,"[email protected]")