Чтобы проверить (используя openDS SDK), какой член принадлежит к какой группе в openDS LDAP
Я только что получил это требование два дня назад, и я впервые использую LDAP(openDS). У меня очень ограниченное время на исследования и разработки. Я прошел как можно больше руководства для разработчиков и SDK Api для openDS.
В основном у меня очень простое требование. Мне будет предоставлен "идентификатор пользователя", и с его помощью я должен аутентифицировать, принадлежит ли этот пользователь к каким-либо доступным группам (определенным мной) в LDAP.
Мне удалось сделать этот фрагмент кода:
public void getGroup(String userId) {
Connection connection = new LDAPConnection().getConnection();
try {
// No explicit bind yet so we remain anonymous for now.
SearchResultEntry entry;
entry = connection.searchSingleEntry("ou=Groups,dc=example,dc=com",
SearchScope.WHOLE_SUBTREE,
"(uniqueMember=" + "uid="+userId+", ou=People, dc=example,dc=com" + ")",
"cn");
String cn = entry.getAttribute("cn").firstValueAsString();
System.out.println("Hello, " + cn + "!");
} catch (ErrorResultException e) {
e.getMessage();
} finally {
closeConnection(connection);
}
}
Теперь, если я получу результат поиска, тогда пользователь принадлежит группе, иначе нет. Теперь я не уверен, что это способ добиться этого. Я также выглядел как "isMemberOf", но я не уверен, что API предоставляет такой метод или это что-то еще.
Буду признателен за любую оказанную помощь. Благодарю.
2 ответа
Клиент LDAP должен передать запрос поиска на сервер со следующим фильтром:
'(isMemberOf=<the distinguished name of the entry>)'
и соответствующий базовый объект, фильтр и запрашиваемые атрибуты. Это предполагает, что сервер имеет isMemberOf
виртуальный атрибут включен.
Если доступен только компонент относительного отличительного имени, клиент LDAP должен выполнить поиск отличительного имени - в этом случае используйте (<attribute-type>=<userid>>)
(например, '(uid=user.1)'
) а также 1.1
для атрибута запроса, который не приведет к возвращению атрибутов. Отличительное имя всегда возвращается для каждой соответствующей записи. Затем построить фильтр с isMemberOf
и искать снова.
смотрите также
Поиск выше возвращает CN группы. Если вы получили ID пользователя и вам нужно проверить, что пользователь входит в хорошо известную группу, тогда фильтр "(isMemberOf=
Если вы ищете (&(uid=)(isMemberOf=, то это часть группы.
С уважением,
Лодовико.