DN - Java JDNI LDAP - общее имя против идентификатора пользователя

Общее имя, скажем, "Джон Смит" используется для составления DN, но возможно ли составить полное DN с использованием UID.

Я в настоящее время делаю это, и это работает.

Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, 
env.put(Context.PROVIDER_URL, "ldap://myDomain.com");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "CN=John Smith,OU=IT,OU=MyCompany,OU=Users,DC=myDomain,DC=com");
env.put(Context.SECURITY_CREDENTIALS, "myPassWrd");

Теперь я хочу использовать UIDНапример, J.smith, для аутентификации вместо его полного имени. Есть идеи?

2 ответа

Решение

Я использую:

 env.put(Context.SECURITY_PRINCIPAL, username);
 env.put(Context.SECURITY_CREDENTIALS, password); 

Работает для меня.

В наших процедурах аутентификации LDAP мы создаем jndi учетная запись пользователя, которую приложение использует для аутентификации в LDAP, когда приложение стабилизирует соединение, используя отличительное имя пользователя jndi (пример: uid=jndi,ou=branch,dc=com,dc=your,dc=organization) затем (при условии ветвления для пользовательских узлов в дереве) он использует следующий код, чтобы проверить, является ли пользователь uid находится в дереве LDAP:

public String findUserDnByBranchAndUid(String branchName, String uid) throws NamingException {
    SearchControls searchControls = new SearchControls();
    searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    searchControls.setCountLimit(1);

    NamingEnumeration<SearchResult> answer;
    answer = dirContext.search(branchName, String.format("(uid=%s)", uid), searchControls);

    if (answer.hasMoreElements()) {
        SearchResult searchResult = answer.nextElement();
        return searchResult.getNameInNamespace();
    } else {
        return null;
    }
}

Называя это так:

String userDn = findUserDnByBranchAndUid("ou=users,dc=com,dc=your,dc=organization", "jsmith");

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

Если все идет хорошо, то пользователь jsmith вошел в систему со своими учетными данными, указав только свой идентификатор, не предоставив непригодного для использования DN.

Другие вопросы по тегам