Помогите понять олицетворение - PullRequest
5 голосов
/ 09 апреля 2011


Может ли кто-нибудь помочь мне понять концепцию «подражания»?

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

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

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

Так что, если я использую 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 ()

Один и тот же пользователь, пользователь, запрашивающий страницу.

1 Ответ

1 голос
/ 09 апреля 2011

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

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

...