Вы не можете запросить аутентификацию HTTP (будь то базовая аутентификация или встроенная проверка подлинности Windows), не создавая диалоговое окно проверки подлинности в случае отсутствия учетных данных.
В общем, для гибридного HTTP-auth + cookie-auth вы используете как анонимный, так и аутентифицированный доступ для основной части сайта, но допускаете только аутентифицированный доступ к одному конкретному сценарию.
Когда пользователь обращается к странице без какого-либо типа auth, вы выплевываете страницу с формой входа для авторизации на основе файлов cookie, а также ссылку на один URL-адрес, который разрешает только аутентифицированный доступ. Пользователь может заполнить форму для файлов cookie & форм auth или нажать ссылку для входа в систему с помощью HTTP auth.
Если пользователь следует этой ссылке, им будет предоставлен ответ 401
и он должен предоставить HTTP-аутентификацию либо через диалоговое окно auth, либо автоматически с помощью встроенной проверки подлинности Windows. Как только это произойдет один раз, браузер начнет отправлять те же учетные данные на каждую будущую страницу, поэтому IIS будет декодировать учетные данные, чтобы дать вам ожидаемый REMOTE_USER
при запуске ваших основных скриптов сайта.
Браузеры будут отправлять учетные данные только на страницы в том же каталоге, что и скрипт 401
, или его подкаталоги. По этой причине лучше всего установить скрипт HTTP-auth в корневой каталог, например /login.aspx
.
Однако есть несколько браузеров, которые не будут автоматически отправлять учетные данные для последующих страниц и требуют, чтобы каждый HTTP-запрос сначала ответил 401
, прежде чем отправлять запрос снова с учетными данными. Это делает невозможным использование схем auth и hybrid-auth (а также делает просмотр защищенных сайтов намного медленнее!). Единственный современный браузер, который делает это, - это Safari. Возможно, вам все равно, поскольку поддержка Safari для встроенной проверки подлинности Windows традиционно была неаккуратной в любом случае, и она все равно может использовать формы типа файлов cookie.
Возможный дубликат [Как поддерживать аутентификацию NTLM с возвратом в ASP.NET MVC?] (Http://stackoverflow.com/questions/4027911/how-to-support-ntlm-authentication-with- fall-back-to-form-in-asp-net-mvc) – Neil