Разрешить доступ без проверки подлинности, сохраняя проверку подлинности 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 из такого пользовательского обработчика.

0 ответов

Другие вопросы по тегам