Могу ли я отключить подражание только в нескольких случаях - PullRequest
17 голосов
/ 24 сентября 2008

У меня есть приложение, в котором используется олицетворение. Но когда пользователь входит в систему как администратор, некоторые операции требуют от него записи на сам сервер. Теперь, если эти пользователи не имеют прав на реальном сервере (некоторые не имеют), он не позволит им писать.

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

Есть ли способ сделать что-то подобное?

using(HostingEnvironment.Impersonate.Off())
  //I know this isn't a command, but you get the idea?

Спасибо.

Ответы [ 4 ]

21 голосов
/ 20 октября 2008

Убедитесь, что у пула приложений есть необходимые права.

Затем, когда вы хотите вернуться к идентификатору пула приложений ... выполните следующее:

private WindowsImpersonationContext context = null;
public void RevertToAppPool()
{
    try
    {
        if (!WindowsIdentity.GetCurrent().IsSystem)
        {
            context = WindowsIdentity.Impersonate(System.IntPtr.Zero);
        }
    }
    catch { }
}
public void UndoImpersonation()
{
    try
    {
        if (context != null)
        {
            context.Undo();
        }
    }
    catch { }
}
2 голосов
/ 24 сентября 2008

Я не уверен, является ли это предпочтительным подходом, но когда я захотел это сделать, я создал экземпляр WindowsIdentity и вызвал метод Impersonate . Это позволяет последующему коду выдавать себя за другого пользователя Windows. Он возвращает WindowsImpersonationContext , который имеет метод Undo , который снова возвращает контекст олицетворения.

0 голосов
/ 24 сентября 2008

Я только что получил разрешение на запись в папки для «Прошедших проверку»

0 голосов
/ 24 сентября 2008

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

http://support.microsoft.com/kb/306158

Это ссылка на эту последнюю часть, но в основном вы олицетворяете User.Identity

Это будет означать, что вам придется олицетворять в начале любого обращения к странице, выключать его, когда вам это нужно, затем снова включать его, когда вы закончите, но это должно быть работоспособным решением. *

...