Помогите понять олицетворение



Не мог бы кто-нибудь помочь мне понять концепцию "олицетворения"?

Насколько я понимаю, когда происходит олицетворение, код выполняется от имени некоторой личности.

Таким образом, для веб-страницы, пока олицетворение отключено, веб-страница всегда будет работать под своей настроенной учетной записью.

Если он включен, я могу "переопределить" его учетную запись по умолчанию и установить учетную запись, под которой я хочу запустить веб-приложение.

Итак, если я использую 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 5

1 ответ:

При использовании олицетворения, ASP.NET при необходимости приложения могут выполняться с использованием идентификатора клиента, от имени которого они работают. Обычно это делается для того, чтобы избежать проблем с аутентификацией и авторизацией в системе. ASP.NET код приложения. Вместо этого вы полагаетесь на IIS для проверки подлинности пользователя и либо передаете маркер проверки подлинности пользователю. ASP.NET приложение или, если не удается аутентифицировать пользователя, передать неавторизованный маркер.

Из очень хорошей статьи ASP.NET олицетворение