2013-12-04 4 views
9

Это возможно до. Net4.0 и IIS 7.5.Смешивание форм и проверка подлинности Windows в .Net 4.5

Общая идея заключается в том, что вы разрешаете анонимность и аутентификацию форм для вашего сайта интрасети, а в подкаталоге вы включаете аутентификацию Windows вместе с аутентификацией форм и отключите анонимный. Отключив переадресацию форм 401 => 302 с помощью специального кода, вы сможете получить доступ к имени пользователя и домену пользователей.

Если Google для решения все дороги, кажется, ведут к этому блог/решения: http://mvolo.com/iis-70-twolevel-authentication-with-forms-authentication-and-windows-authentication/

Однако при обновлении до .net 4.5 и IIS8 он ломается, всегда заставляя 302 перенаправление на страницу входа в систему и не средства захвата usernamen.

Кто-нибудь еще это решил?

ответ

0

За время тестирования данной установки (.NET 4.5/IIS 7.5 с обоих окон с поддержкой аутентификации подлинности и формы), следующее условие

(System.Web.HttpContext.Current.User.Identity is System.Security.Principal.WindowsIdentity)

является true (после того, как пользователь успешно прошел аутентификацию с помощью Windows, AUTH), которые теоретически могут быть использованы для определения пути решения этой проблемы. Вы не отправляли никаких кодов, поэтому я не могу точно сказать, как вы решите свою проблему. Создаете ли вы заказной билет на аутентификацию?

Кажется, что аутентификация Windows теперь перехватывает аутентификацию форм, а Request.IsAuthenticated == true еще до того, как код создает билет проверки подлинности Forms! Очень неприятно, это вызвало проблемы для одного из моих клиентов, когда они решили установить .NET 4.5 после того, как они работали нормально уже несколько лет, смешивая как Windows, так и формы auth. Пока (пока патч не будет готов, а у клиента есть время для его тестирования и развертывания), решение заключалось в том, чтобы удалить .NET 4.5 и переустановить 4.0. Если они действительно думают, что им нужно что-то 4,5, они будут использовать машину разгона.

Например, вы можете создать собственный класс идентичности со своей собственной версией bool IsAuthenticated вместо того, чтобы полагаться только на Request.IsAuthenticated (опять же, вы не отправляли код, поэтому я могу только предположить, что это то, что вы делаете). Тогда решение включает в себя проверку, существует ли билет проверки подлинности форм в случае, когда эти два фактора являются true:

System.Web.HttpContext.Current.Request.IsAuthenticated && (System.Web.HttpContext.Current.User.Identity is System.Security.Principal.WindowsIdentity)

Вы больше не можете полагаться только на Request.IsAuthenticated, потому что, технически, запрос был идентифицирован, когда пользователь проходит аутентификацию через Windows auth. (В то время как раньше, при смешивании окна AUTH и формирует AUTH, Request.IsAuthenticated не true до билет проверки подлинности форм не был создан.)

+0

Интересно. Я испытываю противоположность. Формы auth trumps win auth, и все запросы к странице под win auth сразу перенаправляются на страницу входа в формы. Однако моя настройка - IIS8, а не 7.5. Я использовал идентификатор win IIS для извлечения имени пользователя и домена пользователя и вручную сделал регистрацию форм. Таким образом, я мог бы предлагать как одиночные, так и ручные логины с формой. – Fiffe

+0

Я также делаю это для SSO. Если бы я мог настроить систему, чтобы избежать установки 'Request.IsAuthenticated = true' после окон auth (и до формы auth), я мог бы избежать выполнения патча (изменение всего кода, который проверяет' Request.IsAuthenticated', чтобы использовать roll-my-own вместо этого.) Не могли бы вы разместить свой web.config, пожалуйста? Я вижу такое же поведение на сервере 2012/iis8 (запрос считается аутентифицированным после успеха Windows auth, но до форм auth, поэтому «windows» является основным методом auth из точки зрения asp.net вместо форм .. но не повезло с настройками конфигурации все же). Спасибо за информацию. – nothingisnecessary

7

Я сделал решение MVC 5, что делает его похожим на внешний провайдер, полный исходный код здесь:

https://github.com/MohammadYounes/MVC5-MixedAuth

Я не имел возможности проверить его на IIS 8, попробовать его и дайте мне знать.

+3

Обратите внимание, что [ссылки только ответов] (http://meta.stackoverflow.com/tags/link-only-answers/info) обескуражены, SO ответы должны быть конечной точкой поиска решения (vs. еще одна остановка ссылок, которые со временем становятся устаревшими). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. – kleopatra

+0

Насколько я понимаю, пользователь должен ввести свое имя пользователя Windows для аутентификации с помощью Windows, так ли это? Вы не можете сделать это автоматически? – Tuco

+0

@ Tuco nope, это автоматический логин. –

Смежные вопросы