如何在不同的安全上下文中启动线程?

Tru*_*der 14 c# multithreading security-context principal

如何在不同用户的安全上下文中启动线程?当进程正常启动一个线程时,安全上下文也会被传递但是如何在不同安全上下文中使用不同用户的主体启动一个线程?

Luc*_*ero 5

我相信你可以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);
Run Code Online (Sandbox Code Playgroud)