ASP.NET олицетворение в .NETFramework 2 VS .NETFrameWork 4

У нас есть сайт ASP.NET в .NetFramework 2 (с App Pool 2 Classic в IIS 7.5). Мы используем смешанную аутентификацию с Basic Authenticate и Form Authenticate.

Конфигурация в IIS:

введите описание изображения здесь

И укажите конкретного пользователя в анонимной аутентификации с именем: Guest.

Когда пользователь входит в систему с другим именем пользователя, например Admin, мы используем олицетворение:

string Token = GetSpecificTokenOfCurrentUser();
System.Security.Principal.WindowsIdentity WinUser = (WindowsIdentity) HttpContext.Current.Application["User_"+Token];
WinUser.Impersonate();

Так что все будет идеально, пока мы не обновим веб-сайт до .NetFramework 4 и не добавим на веб-сайт множество функций .NET 4, и мы решили, что у нас есть новая проблема.

Проблема заключается в том, что пользователь входит в систему с помощью Admin и одновременно открывает несколько страниц (3-4), например, быстро открываемый в новой вкладке, в некоторых случаях Пользователь не олицетворяется. Например, первая страница правильно олицетворяется для Admin, но другие страницы не олицетворяются и все еще имеют Guest пользователя.

Это так странно, у нас нет никаких изменений в части аутентификации. изменения заключаются в том, что мы обновляемся до .NetFrameWork 4, а пул приложений - .NetFrameWork 4 - Classic.

У нас есть тест в версии сайта .Net 2. все в порядке, но мы изменили пул приложений на .NetFrameWork 4, и проблема была показана.

Итак, вопрос в том, какие изменения произошли в пуле приложений .NetFramework 4 для олицетворения?

Что мы упустили? любое предложение?


person Saeid Alizade    schedule 17.09.2013    source источник


Ответы (1)


Я нашел несколько точек:

1- Мультизапрос ведет себя как параллельная обработка, и, как вы знаете, в классическом режиме у нас есть некоторые ограничения параллелизма.

2- В интегрированном режиме у нас есть некоторые ограничения в Impersonate Enable. Поведение по умолчанию для Enable Impersonate - 500.24. Ошибка: Internal Server Error An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode", если мы хотим включить impersonate, нам нужно добавить <validation validateIntegratedModeConfiguration="false"/> в <system.webServer> в web.config, поэтому мы не получаем ошибку, но теперь у нас есть еще одно ограничение. Команды олицетворения не работали в Begin_Request и AuthenticateRequest методах, все остальное работало отлично.

Критические изменения для Приложения ASP.NET 2.0, работающие в интегрированном режиме на IIS 7.0, в этом случае являются очень хорошей статьей.

Итак, решение

Перейдите в интегрированный режим (нужно добавить тег) и используйте Impersonate в любых других методах вместо Begin_Request или AuthenticateRequest.

person Saeid Alizade    schedule 17.09.2013