LDAP / Active Directory и Java аутентификация с пустым паролем - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть следующий устаревший код 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) {}
    }
...