Как я запускаю поток в другом контексте защиты?

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

14
задан Jon Seigel 9 April 2010 в 14:22
поделиться

2 ответа

Я считаю, что вы можете просто установить 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);
5
ответ дан 1 December 2019 в 16:31
поделиться

Я успешно использовал приемы , подобные этой , для олицетворения.

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

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

1
ответ дан 1 December 2019 в 16:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: