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