Разрешить доступ без проверки подлинности, сохраняя проверку подлинности IIS Windows и время от времени имитируя
У меня есть несколько веб-сайтов только для интрасети, написанных на ASP.NET MVC 5 и размещенных на IIS7.
Для этого я хочу включить олицетворение при доступе к базе данных.
Я не хочу полное олицетворение, которое длится для всего запроса - потому что оно мне не нужно и потому что оно не поддерживается в интегрированном режиме и требует подавления ошибки.
Важным примечанием является то, что олицетворение здесь не связано с безопасностью. Я не хочу запрещать кому-либо доступ к веб-сайту (если они находятся в сети компании, это уже предоставленное разрешение).
Скорее, мне нужно хранить имя пользователя Windows в базе данных против определенных действий только для целей ведения журнала. Если имя пользователя Windows недоступно для ведения журнала, это нормально, и пользователь должен иметь возможность продолжить.
Код, который я собираюсь использовать, будет
var identity = User.Identity as System.Security.Principal.WindowsIdentity;
if (identity != null && !identity.IsAnonymous)
{
using (var context = identity.Impersonate())
{
// access SQL Server who will get the user name from SUSER_SNAME()
}
}
Проблема в том, что для того, чтобы IIS мог получить учетные данные Windows, анонимный доступ должен быть отключен, в противном случае IIS даже не будет пытаться запрашивать учетные данные тем или иным способом.
Это проблема, потому что я хочу сохранить анонимный доступ.
Можно ли как-то настроить IIS или приложение, чтобы пускать туда и анонимных пользователей?
В идеале это должно происходить прозрачно, но если это невозможно, я, вероятно, буду рад браузеру, отображающему диалоговое окно имени пользователя / пароля, которое пользователь может закрыть, нажав кнопку ОК, который предоставит пустое имя пользователя / пароль для IIS, что позволить им и сопоставить их с анонимной ситуацией (иш).
Однако не следует запрашивать учетные данные у пользователей, чьи браузеры могут автоматически предоставлять учетные данные Windows (IE делает это по умолчанию, Firefox делает это после изменения параметра).
Я видел этот взлом эры.NET v1.1, который включает в себя размышления о частных полях и этот вопрос о написании пользовательских HttpModule
- но говорят, что он вызывается после того, как IIS завершает свой бизнес аутентификации, что слишком поздно, и я не знаю, как инициировать рукопожатие NTLM из такого пользовательского обработчика.