Сочетание проверки подлинности с помощью форм с проверкой подлинности Windows

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

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

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

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


person dr_draik    schedule 12.02.2010    source источник


Ответы (7)


Собственно, вы можете это сделать. Немного поздно для @dr_draik, но это появилось в результатах Google для меня, поэтому я решил поделиться некоторыми знаниями.

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

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

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

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

person Dan F    schedule 27.05.2011
comment
Переключение принятого ответа, так как, очевидно, этот вопрос получает довольно много ответов, и так будет понятнее. - person dr_draik; 28.09.2011
comment
Решение для интегрированного режима не работает с .NET 4.5 и IIS8. Кто-нибудь взломал это? - person Fiffe; 06.12.2013
comment
Я отключил проверку подлинности Windows и использую только проверку подлинности с помощью форм, и этот HttpContext.Current.Request.ServerVariables [LOGON_USER] по-прежнему работает. Мне нужно это сделать, потому что иногда нашим пользователям нужно иметь возможность выйти из своей учетной записи Windows и использовать другие учетные данные для входа. Я заметил, что если включена проверка подлинности Windows, он не будет использовать новый идентификатор пользователя форм после того, как пользователь переключит учетную запись. - person Niloofar; 24.08.2017
comment
Как отключил аутентификацию Windows? в IIS? и используя ASP.NET Core? и с помощью Powershell? - person Kiquenet; 09.05.2018

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

person David    schedule 12.02.2010
comment
Спасибо, решение с двумя приложениями кажется наиболее работоспособным, но я считаю, что нам просто нужно использовать формы auth. Довольно неудобно иметь отдельное приложение только для входа в систему. - person dr_draik; 15.02.2010
comment
страница может получить их учетные данные и передать их приложению проверки подлинности форм, которое я не понимаю ... передать как? - person Arthur Hylton; 23.08.2018

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

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

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

Хотя это может быть технически возможно, я бы не предлагал этот путь, потому что это похоже на взлом, и использование собственной безопасности никогда не будет хорошей идеей (если только вы действительно < / em> знаете, что делаете).

person adrianbanks    schedule 16.02.2010
comment
Спасибо за вклад - немного раздражает, что это больше невозможно (или практически невозможно), но я полагаю, это цена прогресса. - person dr_draik; 16.02.2010
comment
Спасибо, что поделились этой информацией! Я согласен с тем, что вы сказали, чтобы не запускать нашу собственную функцию безопасности, если мы не уверены - person D Simm; 13.10.2015

Существует множество статей о смешивании аутентификации путем настройки конфигурации для использования форм с разрешением анонимного доступа к приложению. Во-вторых, страница для интегрированной аутентификации должна быть создана с настройками IIS, запрещающими анонимность и использующей встроенную аутентификацию. Здесь вы сможете совершить волшебный трюк, проверив переменную «Logon_User» в коллекции ServerVariables запросов. И, наконец, для встроенной аутентификации для тихого входа пользователя у него должно быть короткое имя хоста. Поэтому, если ваша часть проверки подлинности форм доступна в Интернете через полное доменное имя, должно быть какое-то перенаправление на короткую страницу хоста. Я думаю, что этого можно добиться с помощью всего одного приложения под IIS с двумя виртуальными каталогами.

person dexter    schedule 28.10.2010
comment
Насколько мне известно, это решение работает на IIS6, но не на IIS7. это потому, что в IIS6 вы можете назначить режим аутентификации для каждой папки (даже для каждого файла), в то время как в IIS7 настройки аутентификации являются глобальными для всего приложения. - person pomarc; 21.12.2010

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

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

Проблемы довольно сложные, и в статье подробно рассматриваются принципы и решения.

person Ben McIntyre    schedule 04.11.2015

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

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

person Bryan    schedule 12.02.2010
comment
Спасибо, решение с двумя приложениями кажется наиболее работоспособным, но я считаю, что нам просто нужно использовать формы auth. Довольно неуклюже иметь отдельное приложение только для входа в систему. - person dr_draik; 15.02.2010

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

Раньше мы использовали 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>
person Krip    schedule 12.02.2010
comment
Спасибо - попробовали, но это все еще пустая строка даже с рекомендованными настройками. Я проверил статью, к сожалению, она не относится к IIS7. - person dr_draik; 12.02.2010