Может ли кто-нибудь помочь мне понять концепцию «подражания»?
Насколько я понимаю, когда происходит олицетворение, код выполняется от имени некоторой личности.
Таким образом, для веб-страницы, пока олицетворение отключено, веб-страница всегда будетзапустить под своей настроенной учетной записью.
Если он включен, я могу «переопределить» его учетную запись по умолчанию и установить учетную запись, под которой я хочу запускать веб-приложение.
Так что, если я использую IIS7 и у меня есть следующее:
- Пул приложений с идентификатором, настроенным для настраиваемой учетной записи 'user1'.
- Веб-сайт asp.net, с пулом приложений, указанным выше, с отключенным олицетворением.
- Windowsаутентификация включена.
У меня также есть следующий код:
IIdentity ii = Thread.CurrentPrincipal.Identity;
IIdentity iii = Page.User.Identity;
ЕслиЯ захожу на страницу, меня просят ввести учетные данные Windows, я ввожу учетные данные 'user2'.
Поскольку олицетворение отключено, я ожидаю, что имя IIdentity будет 'user1', которое не является его'user2'.
Может кто-нибудь помочь мне понять, что происходит?Полагаю, я полностью неправильно понял концепцию «олицетворения».
Спасибо
ОБНОВЛЕНИЕ 1
Я наткнулся на эту ссылку после поиска некоторое время:http://msdn.microsoft.com/en-us/library/aa302377.aspx
Кажется, есть три объекта IIdentity.
HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
WindowsIdentity i2 = WindowsIdentity.GetCurrent ();
По ссылке я понимаю, что:
HttpContext.Current.User.Identity: представляет текущего пользователя, запрашивающего страницу.
Thread.CurrentPrincipal.Identity: удостоверение, выполняющее поток в данный момент.Я предполагаю, что эта личность будет той, под которой выполняется текущий веб-запрос, и его роли asp.net будут определять, что пользователь может и не может делать в приложении.
Я полагаю, что в большинстве случаев HttpContext.Current.User.Identity и Thread.CurrentPrincipal.Identity были бы одним и тем же пользователем, но для некоторых сценариев я предполагаю, что пользователь, запрашивающий страницу, и Thread.CurrentPrincipal.Identityможет быть другим.
Тогда есть: WindowsIdentity i2 = WindowsIdentity.GetCurrent ();
Ссылка говорит: «WindowsIdentity = WindowsIdentity.GetCurrent (), которая возвращает идентификатор контекста безопасноститекущий выполняемый поток Win32 ».
После нескольких тестов, включающих отключение« олицетворения », и для моего текущего сценария я обнаружил, что это олицетворение, которое олицетворяется.
Если я не подражаю, 'WindowsIdentity.GetCurrent ();'будет отражать настроенного пользователя в пуле приложений, и если я выполню олицетворение, идентичность изменится на ту, которую я установил в web.config:
<identity impersonate="true" password="**" userName="****" />
ОБНОВЛЕНИЕ 2
И если я установлю web.config как: <identity impersonate="true" />
WindowsIdentity.GetCurrent () будет выдавать себя за пользователя, делающего запрос так:
HttpContext.Current.User.Identity
Thread.CurrentPrincipal.Identity
WindowsIdentity.GetCurrent ()
Один и тот же пользователь, пользователь, запрашивающий страницу.