Как подключить LDAP с именем пользователя и паролем? - PullRequest
0 голосов
/ 29 мая 2018

У меня работает мой Ldap, единственная проблема, с которой я сталкиваюсь, была, когда я пытаюсь войти в систему с электронной почтой, когда я попадаю в остальную часть в приведенном ниже коде.Если мое имя пользователя отличается от адреса электронной почты, оно выдает ошибку.то есть, если мой адрес электронной почты - «skumar@gmail.com», а мое имя пользователя - «saurakumar», то из-за неверного пароля пользователя произойдет ошибка.Что касается внутреннего, я использую имя пользователя для создания электронной почты, т.е. если пользователь входит в систему с именем 'karan', то я ожидаю, что электронное письмо будет karan@gmail.com, что не соответствует действительности во многих сценариях, и аутентификация не удалась.Я ищу решение, в котором я могу войти в систему либо по электронной почте, либо по имени пользователя, и я смогу аутентифицировать пользователя.Ниже приведен фрагмент моего кода.Пожалуйста, предложите?

    ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
    ldapEnv.put(Context.PROVIDER_URL, url);
    ldapEnv.remove(Context.SECURITY_PROTOCOL);
    if (email == null) {
        lContext = new InitialLdapContext(ldapEnv, null);
        entryResult = searchUserEntry(lContext, user, searchCtrls);
        final String usrDN = ((Context) entryResult.getObject()).getNameInNamespace();

        lContext.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
        lContext.addToEnvironment(Context.SECURITY_PRINCIPAL, usrDN);
        lContext.addToEnvironment(Context.SECURITY_CREDENTIALS, pass);
        lContext.reconnect(null);
    } else {
            ldapEnv.put(Context.SECURITY_PRINCIPAL, email);
            ldapEnv.put(Context.SECURITY_CREDENTIALS, credentials);
            lContext = new InitialLdapContext(ldapEnv, null);
            return lContext;
        searchUserEntry(lContext, user, searchCtrls);
    }

1 Ответ

0 голосов
/ 31 мая 2018

Обычно это трехэтапный процесс:

  1. Привязка к LDAP от имени администратора.Обратите внимание, что это не должен быть главный пользователь, определенный в файле конфигурации: он предназначен для самого использования OpenLDAP.Вместо этого это должен быть пользователь, упомянутый в DIT, который имеет соответствующий доступ к поиску для следующего шага.

  2. Поиск пользователя по некоторому уникальному атрибуту, например, в вашем электронном письме.

  3. Используя найденное DN пользователя и указанный им пароль, попытайтесь выполнить привязку как этот пользователь (с помощью метода reconnect(), после соответствующего изменения среды контекста).

Если все получится, у вас будет успешный вход в систему.Если (2) или (3) произойдет сбой, у вас произойдет сбой, и обратите внимание, что вы не должны сообщать пользователю, что это было: в противном случае вы передаете информацию злоумышленникам.Вы не должны упоминать, было ли неправильное имя пользователя (электронная почта) или пароль.

...