Смешивание проверки подлинности форм с проверкой подлинности Windows

У меня есть (ASP.NET 3.5) интрасеть приложение, которое было разработано для использования проверки подлинности форм (наряду с системой членства aspnet по умолчанию). Я также хранить дополнительную информацию о пользователях в другой таблице, которая разделяет его первичный ключ в таблице aspnet_users.

для пользователей, которые являются частью нашего домена я храню их имя учетной записи домена в таблице вторичных пользователей, и я хочу автоматически войти в систему пользователей, чье имя учетной записи домена соответствует имени, хранящемуся в таблица.

Я прочитал руководства, которые доступны - все они от двух лет назад или более и предполагают, что вы можете активировать проверку подлинности Windows на отдельной странице входа в систему, которая позволяет извлечь имя учетной записи домена. Однако из того, что я могу сказать, это невозможно в IIS7 (общий метод аутентификации применяется на всех страницах и не может быть выборочно деактивирован, и оба метода аутентификации не могут быть применены на одной странице).

Is есть способ заставить IIS пройти через имя учетной записи домена windows запрашивающего пользователя? Мне не нужна правильная аутентификация AD, только доменное имя.

7 ответов


на самом деле, вы можете сделать это. Немного поздно для @dr_draik, но это появилось в результате google для меня, поэтому я подумал, что поделюсь некоторыми знаниями.

Если вы находитесь в классическом режиме-включите как Windows, так и Forms auth. Вы получите предупреждение о том, что не сможете сделать оба сразу, но вы можете игнорировать. Затем вы можете spelunk вокруг различных свойств, таких как Код:

HttpContext.Current.Request.ServerVariables["LOGON_USER"]

и выловите имя пользователя оттуда.

Если вы находитесь в интегрированный режим - 4021905 IIS7 Challenge-based и login redirect-based аутентификация не может использоваться одновременно ведет к IIS 7.0 двухуровневая аутентификация с аутентификацией форм и аутентификацией Windows который является модулем, который позволяет выборочно изменять auth для разных страниц.


вы всегда можете настроить 2 отдельных приложения в IIS7. Будет включена проверка подлинности Windows. Другой будет основным приложением с проверкой подлинности форм. Если пользователь зашел в приложение проверки подлинности windows, страница может захватить его учетные данные и передать их в приложение проверки подлинности форм.


(больше для полноты информации, на самом деле)

Я задал этот вопрос охраннику .Net на конференции некоторое время назад. Его ответ был, что это технически возможно, но он никогда не видел, как это делается (и дать ему знать, если я это сделал, и это сработало!).

Он предположил, что это можно сделать, сделав свой собственный фильтр ISAPI и установив его в IIS. Фильтр ISAPI будет перехватывать запросы и в основном выполнять работу это IIS делает при использовании встроенной проверки подлинности, но вернуться к использованию форм, если это не было. Это включало некоторую сложную логику вызова/ответа в фильтре. Это было для IIS6, хотя, так что это может быть по-другому в IIS7.

хотя это может быть технически возможно,Я бы не советовал этот маршрут как это чувствует себя немного взломать, и прокатка собственной безопасности никогда не является хорошей идеей (если вы действительно знаю, что вы делающий.)


есть много статей о смешивании authenticaton, установив config для использования форм с возможностью анонимного доступа к приложению. Во-вторых, страница для интегрированной аутентификации должна быть создана с параметрами IIS, установленными для запрета анонимной и использования встроенной проверки подлинности. Там вы бы волшебный трюк, проверив переменную "Logon_User"коллекции ServerVariables requets. И, наконец, для интегрированной аутентификации, чтобы тихо войти в пользователя, он должен иметь короткое имя хостинга. Так что если ваша часть проверки подлинности форм подвергается интернету через FQDN, должно быть какое-то перенаправление на короткую страницу хоста. Я думаю, что это можно сделать только с одним приложением под IIS с 2 виртуальными каталогами.


Я нашел решение, не используя никаких специальных дополнений. Это было сложно и включало в себя сборку элементов со всех страниц, упомянутых здесь. Я написал об этом: http://low-bandwidth.blogspot.com.au/2014/11/iis7-mixed-windows-and-forms.html

по сути, необходимо включить проверку подлинности forms, windows и anon. Экран входа в систему должен быть основан на формах и содержать кнопку для запуска входа в систему Windows, которая выдает вызов ответа HTTP 401, который в случае успеха создает билет входа на основе форм.

вопросы довольно сложные, и сообщение проходит через принципы и решение в деталях.


к сожалению, то, что вы пытаетесь сделать просто не поддерживается. Для того чтобы ASP.NET чтобы узнать имя пользователя Windows, необходимо использовать проверку подлинности Windows.

вы можете настроить другой сайт / виртуальный каталог, который просто перенаправил информацию об имени пользователя на другую страницу. Но что происходит, когда пользователи, не прошедшие проверку подлинности Windows, пытаются войти в систему?


у меня есть что - то, что вы можете попробовать-не уверен, что это сработает.

в прошлом мы использовали Request.ServerVariables["LOGON_USER"] но, очевидно, для этого, чтобы вернуть непустое значение, вам нужно отключить анонимный доступ.

см. эту статью:http://support.microsoft.com/default.aspx/kb/306359

он предлагает сохранить анонимный доступ на стороне IIS и аутентификацию форм, но отказывать анонимному пользователю следующим образом:

<authorization>
   <deny users = "?" /> <!-- This denies access to the Anonymous user -->
   <allow users ="*" /> <!-- This allows access to all users -->
</authorization>