Как запустить поток в другом контексте безопасности? - PullRequest
14 голосов
/ 09 апреля 2010

Как запустить поток в контексте безопасности другого пользователя? Когда процесс обычно запускает поток, также передается контекст безопасности, но как запустить поток в другом контексте безопасности с принципалом другого пользователя?

Ответы [ 2 ]

5 голосов
/ 09 апреля 2010

Я полагаю, что вы можете просто установить CurrentPrincipal в качестве первой операции кода потока после запуска потока и только после этого начинать выполнять код, который должен выполняться с другим принципалом .

Это должно позаботиться о любых проверках на основе ролей .NET. Если вам также требуется олицетворение для вызовов в ОС, вы можете выдать себя за WindowsIdentity.

Код (может или не может работать - не проверял):

public void Run(object principalObj) {
    if (principalObj == null) {
        throw new ArgumentNullException("principalObj");
    }
    IPrincipal principal = (IPrincipal)principalObj;
    Thread.CurrentPrincipal = principal;
    WindowsIdentity identity = principal.Identity as WindowsIdentity;
    WindowsImpersonationContext impersonationContext = null;
    if (identity != null) {
        impersonationContext = identity.Impersonate();
    }
    try {
        // your code here
    } finally {
        if (impersonationContext != null) {
            impersonationContext.Undo();
        }
    }
}

...

Thread thread = new Thread(Run);
thread.Start(yourPrincipal);
1 голос
/ 09 апреля 2010

Я использовал методы , как это для подражания успеху.

Термин "олицетворение" в контекст программирования относится к техника, которая выполняет код под другой пользовательский контекст, чем пользователь, который изначально запустил приложение, т.е. пользовательский контекст временно изменено один или несколько раз за оформление заявки.

Причина для этого заключается в выполнять задачи, которые текущий пользователь контекст приложения не разрешено делать Конечно можно предоставить пользователю выполнение приложение больше привилегий, но обычно это плохая идея (из-за ограничения безопасности) или невозможно (например, если у вас нет полной административный доступ к машине для сделай так).

...