Я пытаюсь подключиться к AD (2012 R2) с java (8u241) и получаю эту ошибку
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903C8, comment: AcceptSecurityContext error, data 5, v2580 ]
Ошибка 49, это означает, что пользователь / пароль неверен. Но это также может означать, что вход был заблокирован. Я выяснил это с помощью приложения ADExplorer (от sysinternals.com, Microsft): Моя проблема на ServerFault - вход в систему заблокирован из-за использования ip вместо имени . Active-Directory ответит неверным пользователем / паролем, когда хост - это ip вместо Domain-Name.
Код ошибки sub - 5. Я не нашел никакой документации по этому коду 5 нигде. (НЕ 52e. Я получаю 52e, когда ввожу неправильное имя пользователя)
Что это за ошибка (данные 5 LDAP Err 49) и как я могу ее исправить?
Мой код:
public void authenticate(String username, String password) throws Exception {
@SuppressWarnings("UseOfObsoleteCollectionType")
java.util.Hashtable<Object, Object> env = new java.util.Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
String url = "LDAP://" + serverName.toUpperCase()+ '.' + domainName.toUpperCase();
System.out.println("url = '" + url + "'");
env.put(Context.PROVIDER_URL, url);
String sp = takeUntil(domainName.toUpperCase(), '.') + "\\" + username;
System.out.println("sp = '" + sp + "'");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, sp);
env.put(Context.SECURITY_CREDENTIALS, password.getBytes(StandardCharsets.UTF_8));
DirContext ctx = new InitialDirContext(env); // javax.naming.AuthenticationException here
ctx.close();
}
Результат (извиняется на сервере - Win Server 2012 R2):
C:\Users\Administrator\Desktop>java -jar ActiveDirectory.jar array.is blackhole ARRAY\muaaz P0987654321q
url = 'LDAP://BLACKHOLE.ARRAY.IS'
sp = 'ARRAY\muaaz'
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903C8, comment: AcceptSecurityContext error, data 5, v2580 ]