У меня есть следующий устаревший код Java, который снова работает с Active Directory через интерфейс LDAP.
Он отлично работает, за исключением пустых паролей. Как уже упоминалось здесь
Если в свойство среды Context.SECURITY_CREDENTIALS указать пустую строку, пустой массив байтов / символов или значение null, механизм аутентификации будет " никто". Это потому, что LDAP требует, чтобы пароль был непустым для простой аутентификации. Протокол автоматически преобразует аутентификацию в «none», если пароль не указан.
Это означает, что для некоторых (или всех?) Конфигураций Active Directory код будет печатать «OK!» за неправильные пароли (и даже недействительные домены). Я наблюдал такое поведение.
Возможно ли после открытия проверки соединения выполнить процедуру аутентификации (например, проверить фактическое значение аутентификации безопасности и т. Д. c.)?
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
properties.put(Context.PROVIDER_URL, domainController);
properties.put(Context.SECURITY_AUTHENTICATION, "simple");
properties.put(Context.SECURITY_PRINCIPAL, login);
properties.put(Context.SECURITY_CREDENTIALS, password);
//initializing active directory LDAP connection
InitialDirContext dirContext = null;
try {
dirContext = new InitialDirContext(properties);
System.out.println("OK!");
} catch (NamingException e) {
//ignore auth. exception
System.out.println("Failed!!!");
e.printStackTrace();
}finally{
if(dirContext != null)
try {
dirContext.close();
} catch (NamingException e) {}
}