Микширование форм с помощью проверки подлинности Windows

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       
  • Как обрабатывать HTTP-аутентификацию с помощью HttpURLConnection?
  • Аутентификация Socket.IO
  • Аутентификация на основе токенов в ядре ASP.NET (обновлена)
  • Написание привилегированного вспомогательного инструмента с помощью SMJobBless ()
  • Лучшая практика аутентификации на основе токенов REST с JAX-RS и Джерси
  • Конечные точки Google и аутентификация пользователя
  • CSRF-токен, необходимый при использовании аутентификации без учета состояния (= без учета)?
  • Аутентификация с помощью двух разных таблиц
  • Что такое аутентификация на токенах?
  • Использование SymDony2 AccessDeniedHandlerInterface
  • Упреждающий базовый аут с HttpUrlConnection?
  • Interesting Posts

    CSS для установки формата бумаги A4

    Рекомендуется ли использовать самообучающиеся объекты с услугами WCF?

    GCM SERVICE_NOT_AVAILABLE на Android 2.2

    getActivity () возвращает значение null в функции Фрагмент

    Как предотвратить соединение Bluetooth bluetooth Bluetooth от смерти сразу после .connect ()?

    Как разрешить ошибку «Ресурс не найден, который соответствует указанному имени» при добавлении библиотеки v7 AppCompat в Eclipse?

    Render PDF-файл с помощью Java на Android

    Создать ярлык для подключения VPN-соединения в Windows 8

    Windows 10 внутри VirtualBox не масштабируется после обновления с 8.1

    Почему javac жалуется на дженерики, не связанные с аргументами типа classа?

    Должен ли оператор << быть реализован как друг или как функция-член?

    Android – создание слайдера для слайда с левой стороны

    Рекомендации по док-станции WPF

    Как компьютер / ОС сообщают, какая оперативная память находится в машине?

    Чтение файлов Excel из C #

    Давайте будем гением компьютера.