2010-04-09 14 views
13

¿Cómo iniciar un hilo en el contexto de seguridad de un usuario diferente? Cuando un proceso comienza un hilo, normalmente también se pasa el contexto de seguridad, pero ¿cómo iniciar un hilo en un contexto de seguridad diferente con el principal de un usuario diferente?¿Cómo comienzo un hilo en un contexto de seguridad diferente?

+0

Relacionados [publicar] (https://stackoverflow.com/a/7250145/465053) - ¿Cómo suplantar a una cuenta de AD para ejecutar un fragmento de código mientras se ejecuta una aplicación? – RBT

Respuesta

4

Creo que puede simplemente configurar el CurrentPrincipal como la primera operación del código del hilo después de que se inició el hilo, y solo entonces comenzar a ejecutar el código que se supone que se ejecutará con el otro principal.

Esto debería encargarse de cualquier control .NET basado en roles. Si también necesita suplantación para llamadas al sistema operativo, puede suplantar al WindowsIdentity.

Código (puede o no puede trabajar - no probarlo):

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

Un fragmento de código sería agradable. Creo que el flujo ExecutionContext también debe suprimirse. – TrustyCoder

+1

¿Por qué debería suprimirse el flujo 'ExecutionContext'? Cuando utilizo la suplantación (como lo hice aquí), el 'SecurityContext' de' ExecutionContext' se actualiza (marcado con Reflector, esto sucede en el método interno 'UpdateThreadWI' en la implementación de MS). – Lucero

+2

¿Eso funcionó para la pregunta asker? –

1

he utilizado técnicas like this para la suplantación con éxito.

El término "suplantación" en un contexto programación se refiere a una técnica que ejecuta el código bajo otro contexto de usuario que el usuario que originalmente inicia una aplicación, es decir, el contexto de usuario está temporalmente cambia una vez o varias veces durante la ejecución de una aplicación.

La razón de hacer esto es realizar tareas que el contexto actual del usuario de una aplicación no se le permite hacer. Por supuesto podría otorga al usuario la ejecución de una aplicación más privilegios, pero por lo general esto es una mala idea (debido a las restricciones de seguridad ) o imposible (por ejemplo, si usted no tiene acceso administrativo completo a una máquina para hazlo)

Cuestiones relacionadas