За время тестирования данной установки (.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
до билет проверки подлинности форм не был создан.)
Интересно. Я испытываю противоположность. Формы auth trumps win auth, и все запросы к странице под win auth сразу перенаправляются на страницу входа в формы. Однако моя настройка - IIS8, а не 7.5. Я использовал идентификатор win IIS для извлечения имени пользователя и домена пользователя и вручную сделал регистрацию форм. Таким образом, я мог бы предлагать как одиночные, так и ручные логины с формой. – Fiffe
Я также делаю это для SSO. Если бы я мог настроить систему, чтобы избежать установки 'Request.IsAuthenticated = true' после окон auth (и до формы auth), я мог бы избежать выполнения патча (изменение всего кода, который проверяет' Request.IsAuthenticated', чтобы использовать roll-my-own вместо этого.) Не могли бы вы разместить свой web.config, пожалуйста? Я вижу такое же поведение на сервере 2012/iis8 (запрос считается аутентифицированным после успеха Windows auth, но до форм auth, поэтому «windows» является основным методом auth из точки зрения asp.net вместо форм .. но не повезло с настройками конфигурации все же). Спасибо за информацию. – nothingisnecessary