2008-09-24 6 views
17

Tengo una aplicación que tiene suplantación utilizada en todas partes. Pero cuando un usuario inicia sesión como administrador, algunas operaciones requieren que escriban en el servidor. Ahora, si estos usuarios no tienen derechos en el servidor real (algunos no) no les permitirá escribir.¿Puedo desactivar la suplantación solo en un par de instancias?

Lo que quiero hacer es desactivar la suplantación por solo un par de comandos.

¿Hay alguna manera de hacer algo como esto?

using(HostingEnvironment.Impersonate.Off()) 
    //I know this isn't a command, but you get the idea? 

Gracias.

Respuesta

20

Asegúrese piscina la solicitud no tiene los derechos adecuados que necesita.

Entonces, cuando se desea volver a la identidad del grupo de aplicaciones ... ejecute el siguiente:

private WindowsImpersonationContext context = null; 
public void RevertToAppPool() 
{ 
    try 
    { 
     if (!WindowsIdentity.GetCurrent().IsSystem) 
     { 
      context = WindowsIdentity.Impersonate(System.IntPtr.Zero); 
     } 
    } 
    catch { } 
} 
public void UndoImpersonation() 
{ 
    try 
    { 
     if (context != null) 
     { 
      context.Undo(); 
     } 
    } 
    catch { } 
} 
2

No estoy seguro de si este es el enfoque preferido, pero cuando quise hacer esto, descubrí una instancia de WindowsIdentity y llamé al método Impersonate. Esto permite que el código subsiguiente suplante a un usuario de Windows diferente. Devuelve WindowsImpersonationContext que tiene un método Undo que revierte el contexto de suplantación nuevamente.

+0

¿Hay alguna manera de saber de que puedo llamar la cuenta web_app predeterminado sin especificar en cualquier lugar? – naspinski

0

Se puede desactivar la autenticación de la página y luego hacerse pasar manualmente el usuario autenticado durante el resto de su código.

http://support.microsoft.com/kb/306158

Esto tiene una referencia a la última parte, pero básicamente suplantar User.Identity

Esto significa que tendrá que hacerse pasar al comienzo de cualquier llamada a la página, apagarlo cuando lo necesite, vuelva a encenderlo cuando haya terminado, pero debería ser una solución viable.

0

que acaba de terminar de dar las carpetas permisos de escritura a "Usuarios autenticados"

+0

Eso también funciona. Pero deja un gran riesgo de seguridad. Porque incluso los usuarios anónimos podrían escribir en esa carpeta. Le sugiero encarecidamente que se haga una clase que vuelva a la identidad del grupo de aplicaciones. Luego usa esa instancia para revertir. –

Cuestiones relacionadas