В моей организации у нас был запрос на внедрение аутентификации 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 (), но это ничего не изменило.