Чтобы проверить (используя 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=, то это часть группы.

С уважением,

Лодовико.

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