Использование UnboundID LDAP sdk, как я могу получить все группы LDAP, к которым принадлежит определенный пользователь? (Я бы очень признателен за примерный код).UnboundID LDAP SDK: получить все группы для пользователя
ответ
Функция ниже будет работать только для Active Directory, так как она генерирует атрибут член memberOf. Если я найду способ для общего LDAP, я его добавлю.
Entry userEntry = ldapConnection.getEntry(userDN);
List<Entry> entryList = new ArrayList();
String[] memberValues = userEntry.getAttributeValues("memberOf");
if (memberValues != null) {
DNEntrySource entrySource = new DNEntrySource(ldapConnection, memberValues);
while (true) {
Entry memberEntry = entrySource.nextEntry();
if (memberEntry == null) {
break;
}
entryList.add(memberEntry);
}
}
return entryList;
У меня такая же проблема. Однако решение Майкла не работает для меня, так как оно не работает рекурсивно.
Видимо, есть «волшебный» AD-запрос, который получает все группы рекурсивно, см Find Recursive Group Membership (Active Directory) using C# и How do I filter an LDAP query for groups containing a specific user?
В то время как наш AD администратор принес все группы из командной строки с помощью LDIFDE, я не могу получить запрос для работы с UnboundID. Наш CN имеет места внутри, а UnboundID добавляет странный «5c» - но даже с (техническим) пользователем без пробелов я не получаю никакого результата.
В любом случае, вот мой рабочий (и неэффективный) исходный код (с использованием Google Guava). Я оставил некоторые методы и константы, я думаю, что вы можете догадаться, что значение для константы OBJECT_CLASS
это :-)
/**
* Gets the groups for a user which is identified by the filter.
* @param filter The filter that identifies the user
* @return The groups for the user
*/
private List<String> getGroups(final Filter filter) {
LDAPConnection connection = null;
try {
connection = getConnection();
String userDN = getUserDN(connection, filter);
if (userDN == null) {
return Collections.emptyList(); // No user found
}
Multimap<String, String> groupsByDN = ArrayListMultimap.create();
getGroupsRecursively(connection, userDN, groupsByDN);
Set<String> groups = new HashSet<>(groupsByDN.values());
for (String dn : groupsByDN.keySet()) {
// The user is not a group...
if (!dn.equals(userDN)) {
DN distinguishedName = new DN(dn);
for (RDN rdn : distinguishedName.getRDNs()) {
if (rdn.hasAttribute(CN)) {
groups.add(rdn.getAttributeValues()[0]);
break;
}
}
}
}
return new ArrayList<String>(groups);
} catch (LDAPException e) {
throw new RuntimeException("Can't search roles for " + filter, e);
} finally {
if (connection != null) {
connection.close();
}
}
}
/**
* Since LDAP groups are stored as a tree, this fetches all groups for a user, starting with the user's DN and then
* fetching every group's groups and so on.
* @param connection The LDAP connection
* @param distinguishedName The distinguished name for which groups are searched
* @param groupsByDN Contains a distinguished name as key and its group name as result; keys are only searched once!
* @throws LDAPSearchException if the LDAP search fails
*/
private void getGroupsRecursively(final LDAPConnection connection, final String distinguishedName,
final Multimap<String, String> groupsByDN) throws LDAPSearchException {
if (!groupsByDN.containsKey(distinguishedName)) {
Filter groupFilter = Filter.createANDFilter(Filter.createEqualityFilter(OBJECT_CLASS, GROUP),
Filter.createEqualityFilter(MEMBER, distinguishedName));
SearchResult result = getSearchResult(connection, groupFilter, CN);
List<SearchResultEntry> searchResults = result.getSearchEntries();
for (SearchResultEntry searchResult : searchResults) {
String groupName = searchResult.getAttributeValue(CN);
groupsByDN.put(distinguishedName, groupName);
getGroupsRecursively(connection, searchResult.getDN(), groupsByDN);
}
}
}
- 1. Spring LDAP vs UnboundId LDAP
- 2. Каковы шаги аутентификации UnboundID LDAP SDK
- 3. Создайте кеш LDAP с использованием Unboundid LDAP SDK?
- 4. UnboundID LDAP memberof-overlay
- 5. Как повторно использовать соединение LDAP в Unboundid LDAP SDK?
- 6. unboundId предел поиск LDAP
- 7. LDAP UnboundId: получить все значения атрибута из одной записи
- 8. Получить имя группы аутентифицированного пользователя LDAP
- 9. Время ожидания ответа LDAP не работает с Unboundid SDK
- 10. ldap unboundid: создать пользовательский атрибут для записи
- 11. Распространение транзакций EJB 3 и UnboundId LDAP SDK
- 12. Добавить запись в openldap-сервере, используя unboundid ldap sdk
- 13. LDAP: Получить группы пользователей
- 14. UnboundID LDAP SDK связывается с использованием учетных данных Windows текущего пользователя
- 15. Разрешающая ForeignSecurityPrincipals в Active Directory с UnboundID LDAP SDK для Java
- 16. Unboundid не возвращает запрошенные атрибуты LDAP. Зачем?
- 17. Изменение пароля пользователя в LDAP с использованием unboundid
- 18. Аутентификация пользователей LDAP в асинхронном режиме с помощью UnboundID LDAP SDK
- 19. UnboundID LDAP: фильтр memberOf не синхронизирует пользователей
- 20. Аутентификация LDAP с использованием UnboundID: какая безопасность?
- 21. Ошибка привязки UnboundID LDAP DIGEST-MD5 NPE
- 22. UnboundID LDAP - как установить флаги в атрибуте userAccountControl
- 23. Как получить все группы Ldap пользователя, включая вложенные группы в JAVA
- 24. Как указать несколько серверов для LDAPConnection с помощью Unboundid SDK?
- 25. Как получить все группы AD для определенного пользователя?
- 26. Как получить декодированный объектGUID из Active Directory с помощью UnboundID LDAP SDK в java?
- 27. получить имя пользователя и мобильный от LDAP из определенной группы
- 28. ldap запрос для членов группы
- 29. PHP LDAP Получить членов группы
- 30. Spring LDAP - удалить пользователя из группы
Вы нашли, как это сделать? – Michael
Нет, Майкл. У меня нет. – Neo