LDAP: код ошибки 49 - 80090308: LdapErr: DSID-0C0903A9, комментарий: Ошибка AcceptSecurityContext, данные 52e, v1db1

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);

Я не знаю, что именно вызывает эту ошибку.

Ответы

Ответ 2

Для меня проблема решена, когда я устанавливаю главный раздел следующим образом:

env.put(Context.SECURITY_PRINCIPAL, [email protected]);

Ответ 3

52e 1326 ERROR_LOGON_FAILURE Возвращает, когда имя пользователя действительно, но пароль/учетные данные недействительны. Будет предотвращено отображение большинства других ошибок, как указано.

http://ldapwiki.com/wiki/Common%20Active%20Directory%20Bind%20Errors

Ответ 4

Когда вы используете Context.SECURITY_AUTHENTICATION как "простой", вам нужно указать значение атрибута userPrincipalName (user @domain_base).

Ответ 5

У меня была аналогичная проблема при использовании AD на CAS, то есть 52e ошибка. В моем случае приложение принимает полное имя, когда в виде CN = вместо фактического имени пользователя.

Например, если у вас есть пользователь с полным именем Ross Butler, а имя пользователя для входа в него - rbutler - вы обычно ставите что-то вроде: cn = rbutler, ou = Users, dc = domain, dc = com, но наши неудачные каждый раз. Изменяя это на cn = Ross Butler, ou = Users, dc = domain, dc = com, он прошел!!

Ответ 6

В моем случае я должен использовать что-то вроде @для успешного входа в систему.

sample_user @sample_domain

Ответ 7

Для меня проблема решена путем добавления доменного имени в имя пользователя следующим образом:

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);

Ответ 8

если вы отлаживаете и просматриваете ctx = null, возможно, у вас проблемы с именем пользователя, вы должны написать как "ac\administrator" (двойное "\") или "administrator @ac"

Ответ 9

LDAP пытается аутентифицировать AD при отправке транзакции на другую серверную БД. Эта аутентификация завершается с ошибкой, поскольку пользователь недавно изменил свой пароль, хотя эта транзакция была сгенерирована с использованием предыдущих учетных данных. Эта проверка подлинности будет продолжаться до тех пор, пока... если вы не измените статус транзакции на "Завершить" или "Отменить", в этом случае LDAP перестанет отправлять эти транзакции.

Ответ 10

Не могли бы вы расширить это? Что вы подразумеваете под изменением статуса транзакции, чтобы завершить или отменить.

Ответ 11

Для меня проблема решается путем изменения envs следующим образом:

 env.put("LDAP_BASEDN", base)
 env.put(Context.SECURITY_PRINCIPAL,"[email protected]")