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.