Аутентификация LDAP с использованием технического пользователя - PullRequest
0 голосов
/ 26 сентября 2018

В моей организации у нас был запрос на внедрение аутентификации LDAP для нового приложения.Проблема, с которой мы столкнулись, заключалась в том, что CN, используемый для подключения к активному каталогу, отличается от sAMAccountName.

sAMAccountName - это имя пользователя, данное пользователю организацией, в то время как cn было чем-то вроде lastName, firstName [Intern].

Чтобы решить эту проблему, мы решили использовать технического пользователя для получения cn из sAMAccountName, а затем попытаться аутентифицировать пользователя, используя cn и пароль, код выглядел следующим образом:

InitialDirContext initialDirContext = new InitialDirContext(initUserAuthenticationInfo(technicalUserCredentilas.Username, technicalUserCredentilas.Password))
searchResult =initialDirContext.search(AuthenticationHelper.DEFAULT_SEARCH_BASE, "(&(sAMAccountName=" + username + "))", searchCriteria)
userCNFromAD = searchResult.hasMore() ? "CN=" + (searchResult.nextElement().getAttributes().get("cn").get())

проблема заключается в том, что всякий раз, когда неудачная попытка входа в систему для пользователя происходит, Active Directory рассматривает его как неудачную попытку входа для технического пользователя!и затем через некоторое время технический пользователь всегда блокируется. Я пытался закрыть initialDirContext после получения пользователем cn, используя initialDirContext.close (), но это ничего не изменило.

1 Ответ

0 голосов
/ 26 сентября 2018

Active Directory может проверять подлинность пользователей с помощью значений sAMAccountName или userPrincipalName для домена и пользователя.Если у вас есть одно дерево в одном лесу, имя пользователя «sampleuser» в домене с именем «domain.ccTLD» (устаревшее имя «домен») может аутентифицироваться как «domain \ sampleuser» или «sampleuser@domain.com» -нет необходимости выяснять фактическое отличительное имя.

Но для используемого вами потока, который я использую для аутентификации LDAP как на AD, так и на чистых серверах LDAP (OpenLDAP, Oracle Unified Directory и т. Д.):

  • Connectк серверу LDAP. Привязка к учетной записи службы
  • Поиск пользователя с помощью фильтра "(& (sAMAccountName = ...))"
  • Извлечение полностью определенного значения атрибута DN (Однозначное имя илиDN возвращаемого объекта)
  • Отключение от сервера LDAP.
  • Подключение к серверу LDAP
  • Связывание с полученным полностью определенным DN и предоставленным пользователем паролем
  • (Необязательно: если вы также выполняете авторизацию, проверьте членство в группах по мере необходимости)
  • Отключение от сервера LDAP

Отделив вход в систему с помощью системной учетной записи и поиск от входа в систему пользователяи поиск, я никогда не видел системную учетную запись, неправильно заблокированную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...