У меня есть несколько веб-приложений, которые я создал для нашей интрасети.Я хотел, чтобы пользователи не беспокоились о входе в систему, поэтому эти приложения извлекают пользователя, вошедшего в систему, когда они заходят на сайт.Я использовал этот код для этого:
Dim userName As String = User.Identity.Name
CurrentUser = userName.Substring(userName.IndexOf("\") + 1)
Это работает как шарм, здесь никаких проблем.Следующим шагом является запрос Active Directory для того, кто вошел в систему, чтобы получить различную информацию.То, как я сейчас его запрограммировал, работает как чудо на стороне разработчика (типично, потому что я не использую IIS).
Проблема возникает, когда я публикую ее на своем сервере IIS (Windows Server 2008 R2 работаетIIS 7.5), я получаю сообщения об ошибках, которые указывают на конкретную строку в моем коде, который запрашивает Active Directory.Интересно то, что эти приложения прекрасно работали на прошлой неделе.Они сломались после того, как мой администратор сервера выполнил последнюю партию обновлений Windows (обратите внимание, я запускаю их с использованием .Net Framework 4.0)
До того, как я настроил каждое приложение так, чтобы аутентификация Windows была включена, другие типы аутентификациибыли отключены.Для провайдеров переговоры № 1, NTLM № 2.Для Расширенных настроек, Расширенная защита = Выкл. И Включить проверку подлинности в режиме ядра.
Мой web.config имеет следующий набор:
<customErrors mode="Off"/>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
Это были настройки, которые у меня были, ивсе работало как шарм.Теперь, чтобы заставить его работать, мне нужно поменять местами провайдеров, чтобы NTLM был # 1, а Negotiate - # 2.Из-за этого учетные данные пользователя не передаются должным образом, и запрос AD не выполняется.Это кодировка, которую я использую для запроса:
Dim adSearchRoot As New DirectoryEntry("LDAP://DC=[DOMAIN],DC=com")
Dim adSearch As New DirectorySearcher(adSearchRoot)
adSearch.Filter = "(&(ObjectClass=User)(sAMAccountName=" & CurrentUser & "))"
Dim searchResult As SearchResult = adSearch.FindOne()
С тех пор, как при обновлении, при загрузке сайта с Negotiate впереди, это приводит к сбою в нижней строке, потому что у меня нет имени пользователя /пароль установлен для DirectoryEntry.Даже когда я устанавливаю имя пользователя / пароль, он все равно не работает на 100%, как раньше.
Таким образом, у меня возникает вопрос: что мне нужно сделать, чтобы пользователь зашел на сайт, я могу знать ихимя пользователя, и может запрашивать активный каталог, не требуя использования имени пользователя / пароля в DirectoryEntry ??
Это настройка в IIS?Или мне нужно перекодировать?Возможно, настройка web.config?Нужно ли мне возвращать обновления сервера и выяснять, какой из них приводит к разрыву?
Спасибо за совет заранее.Если у вас есть какие-либо вопросы, чтобы помочь ответить на вопрос, дайте мне знать.
ОБНОВЛЕНИЕ
Я попытался, как предложил Мэтт, добавив следующий клип в мой файл web.config:
<security>
<authorization>
<add accessType="Deny" users="?" />
</authorization>
</security>
Это не сработало.Я немного почитал, а затем изменил этот раздел:
<location path="Default Web Site/NameOfApp">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false"/>
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
</authentication>
<authorization>
<add accessType="Deny" users="?" />
</authorization>
</security>
</system.webServer>
</location>
При этом я также удалил строку, которая была выше в моем разделе web.config.Это тоже не сработало (к вашему сведению, это была отличная ссылка http://www.iis.net/ConfigReference/system.webServer/security/authentication)
Затем я наткнулся на эту статью: http://social.technet.microsoft.com/Forums/en/winserverDS/thread/7deba16b-295a-4887-98f9-9f291ed49871, которая, похоже, была похожей ситуацией. В этой статье в конце концов упоминалась «Двойной прыжок».", посмотрев на это и попробовав несколько вещей, это тоже не решило мою проблему.
Следующий шаг
Я собираюсь попробовать новый IIS 7.5внедрение в другой системе Server 2008 R2 и, по сути, начать с нуля, чтобы увидеть, воссоздает ли проблема или нет.
ЛЮБЫЕ новые предложения будут очень полезны.