Как обычно обрабатывается пустое базовое имя пользователя и группы в LDAP

#spring #spring-security #ldap #spring-ldap #spring-security-ldap

Вопрос:

Я добавляю поддержку LDAP для нашего приложения с использованием Spring LDAP, и я заметил, что, по-видимому, приемлемо оставить некоторые параметры конфигурации пустыми. Чтобы сделать вопрос менее когнитивно сложным, я пронумерую несколько утверждений.

  1. Существует утверждение, в FilterBasedLdapUserSearch котором говорится следующее: searchBase must not be null (an empty string is acceptable).
  2. Аналогично, в документации DefaultLdapAuthoritiesPopulator говорится следующее: groupSearchBase: if this is an empty string the search will be performed from the root DN of the context factory. If null, no search will be performed.
  3. DefaultSpringSecurityContextSource имеет этот конструктор: public DefaultSpringSecurityContextSource(String providerUrl) который не указывает Base DN .

Когда я оставляю все три варианта пустыми, я получаю такие ошибки: javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-0310021B, problem 2001 (NO_OBJECT), data 0, best match of: ''

Правильно ли я понимаю, что у меня есть следующие два варианта?

  1. Я должен задать базу поиска как для пользователей, так и для групп, или
  2. Я должен установить Base DN во DefaultSpringSecurityContextSource втором конструкторе: public DefaultSpringSecurityContextSource(List<String> urls, String baseDn)

Бонусный балл для всех, кто может рассказать мне, как это обычно делается для лучшего пользовательского опыта, потому что я могу получить корневой DN из различных источников:

  1. Введенное пользователем доменное имя
  2. URI сервера LDAP: ldap://company.local
  3. Из Bind user DN введенного пользователем, например: CN=binduser,OU=TestUsers,DC=company,DC=local