¿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?
Respuesta
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);
Un fragmento de código sería agradable. Creo que el flujo ExecutionContext también debe suprimirse. – TrustyCoder
¿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
¿Eso funcionó para la pregunta asker? –
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)
- 1. Haciendo un Hilo de seguridad de clase
- 2. ¿Qué significa hilo seguro en un contexto PHP?
- 3. Nuevo formulario en un hilo diferente
- 4. objeto de acceso desde un hilo diferente
- 5. Start/Stop DispatcherTimer de un hilo diferente
- 6. iniciar un temporizador de hilo diferente en C#
- 7. hilo de seguridad con diccionario
- 8. Hilo de seguridad en F #
- 9. ContainsKey hilo de seguridad
- 10. Hilo de seguridad memoization
- 11. ¿Cómo se ejecuta SendMessage desde un hilo diferente?
- 12. ¿Cómo pasar con seguridad un objeto de contexto en un delegado de UIAlertView?
- 13. ¿Cómo puedo llamar a un Proc que toma un bloque en un contexto diferente?
- 14. cómo conseguir un contexto de sincronización WinForm o programa en un hilo WinForm
- 15. engendrar un nuevo hilo para abrir una nueva ventana y cerrarlo desde un hilo diferente
- 16. Cómo ejecutar otro proceso en un bucle en un hilo diferente
- 17. operaciones atómicas Hilo de seguridad en gcc
- 18. Cómo iniciar un hilo detenido
- 19. Cómo puedo matar un hilo en python
- 20. hilo de seguridad con plantilla Etiquetas
- 21. COMIENZO DE LA TRANSACCIÓN dentro de COMIENZO ... contexto END o fuera y sintaxis LOOP
- 22. ¿Qué es un cambio de contexto?
- 23. Cómo negar un contexto
- 24. ¿Se puede precalentar un sombreador en un hilo de fondo con su propio contexto?
- 25. ¿Existe alguna garantía de seguridad de hilo std :: chrono incluso con contexto multinúcleo?
- 26. Cómo utilizar un nombre de ruta diferente en ProxyPass que el nombre del contexto de Tomcat
- 27. iOS, NSURLConnection: Delegar retrollamadas en hilo diferente?
- 28. ¿Cuánta seguridad de hilo es demasiado?
- 29. Cómo crear un hilo?
- 30. Vector de STL y seguridad de hilo
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