Проверка подлинности на основе форм с проверкой подлинности Windows - PullRequest
48 голосов
/ 12 февраля 2010

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

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

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

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

Ответы [ 7 ]

47 голосов
/ 27 мая 2011

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

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

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

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

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

4 голосов
/ 16 февраля 2010

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

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

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

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

4 голосов
/ 13 февраля 2010

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

1 голос
/ 04 ноября 2015

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

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

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

1 голос
/ 28 октября 2010

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

0 голосов
/ 13 февраля 2010

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

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

0 голосов
/ 12 февраля 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...