У меня есть веб-приложение (.NET 3.5), которое отправляет уведомления по электронной почте пользователям. Для этого я ищу в Active Directory электронную почту каждого человека.
В данный момент я жестко задаю свое имя пользователя и пароль, чтобы выполнить поиск AD:
Dim entry As New DirectoryEntry("LDAP://companyad", "myUsername", "myPassword", AuthenticationTypes.Secure)
Dim srch As New DirectorySearcher(entry)
srch.Filter = [String].Format("(&(objectClass=person)(sAMAccountName={0}))", "someOtherUsername")
Dim result As SearchResult = srch.FindOne()
Теперь, очевидно, это не идеально, и я не хочу, чтобы эти учетные данные были жестко закодированы. Мое веб-приложение использует проверку подлинности Windows. Он также использует олицетворение (как зарегистрированный пользователь) для доступа к файлам и SQL Server. Есть ли у меня способ «выдать себя за» зарегистрированного пользователя для поиска в AD?
РЕДАКТИРОВАТЬ 1
Я подумал, что лучше объяснить, почему я выбрал этот ответ. Проблема оказалась не в мультискачке или в Kerberos, так как кажется, что я их правильно настроил.
Недавно я изменил свое приложение, чтобы разрешить доступ к определенной группе только через настройки web.config. Раньше я только разрешал доступ к себе. Я создал группу и добавил себя в нее. Затем я удалил жестко закодированные учетные данные и попытался запустить приложение БЕЗ ПЕРЕЗАПУСКА моего компьютера.
По словам моего сетевого администратора, я не войду в эту новую группу, пока не перезапущу свой компьютер, который, по-моему, и был причиной моей проблемы. Итак, ответ Преета на самом деле самый точный, поскольку мне просто нужно было передать путь LDAP в DirectoryEntry.
РЕДАКТИРОВАТЬ 2
Мне также нужно было зарегистрировать имя участника службы.
Я запустил это:
setspn -A HTTP/[dns name of the site] [machine name]
на моей машине для разработки.
Спасибо всем за ответы.