Compartir a través de


Suplantar y revertir

En ocasiones, puede que sea necesario obtener un símbolo (token) de cuenta de Windows NT que suplante una cuenta de Windows. Por ejemplo, la aplicación ASP.NET podría actuar en nombre de varios usuarios en momentos diferentes. La aplicación podría aceptar un símbolo que representase un administrador de Internet Information Services (IIS), suplantar a dicho usuario, realizar una operación y volver a la identidad anterior. A continuación, podría aceptar un símbolo de IIS que representase a un usuario con menos derechos, realizar una operación y volver de nuevo al estado anterior.

En situaciones en que la aplicación deba suplantar una cuenta de Windows que no haya sido asociada por IIS al subproceso actual, se debe recuperar el símbolo de esa cuenta y utilizarlo para activarla. Esta acción se puede realizar ejecutando las tareas siguientes:

  1. Recupere el símbolo de una cuenta para un usuario concreto haciendo una llamada al método LogonUser no administrado. Este método no está en la biblioteca de clases base de .NET Framework, pero está en el archivo advapi32.dll no administrado. El acceso a métodos en código no administrado es una operación avanzada que supera el ámbito de este análisis. Para obtener más información, vea Interoperar con código no administrado. Para obtener más información sobre el método LogonUser y advapi32.dll, consulte la documentación de Platform SDK.

  2. Cree una instancia nueva de la clase WindowsIdentity, pasando el símbolo. El código siguiente muestra esta llamada en la que hToken representa un símbolo de Windows.

    WindowsIdentity ImpersonatedIdentity = new WindowsIdentity(hToken);
    
    Dim ImpersonatedIdentity As New WindowsIdentity(hToken)
    
  3. Comience la suplantación creando una instancia nueva de la clase WindowsImpersonationContext e inicializándola con el método WindowsIdentity.Impersonate de la clase inicializada, como se muestra en el código siguiente.

    WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate();
    
    WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate()
    
  4. Cuando deje de necesitar la suplantación, llame al método WindowsImpersonationContext.Undo para revertirla, como se muestra en el código siguiente.

    MyImpersonation.Undo();
    
    MyImpersonation.Undo()
    

Si el código de confianza ya ha asociado un objeto WindowsPrincipal al subproceso, puede llamar al método de instancia Impersonate, que no acepta un token de cuenta. Observe que este método sólo es útil cuando el objeto WindowsPrincipal del subproceso representa a un usuario distinto del usuario bajo el cual se está ejecutando actualmente el proceso. Por ejemplo, esta situación se puede presentar si se utiliza ASP.NET con la autenticación de Windows activada y la suplantación desactivada. En este caso, el proceso se ejecuta bajo una cuenta configurada en Internet Information Services (IIS) mientras la entidad de seguridad actual representa al usuario de Windows que está teniendo acceso a la página.

Observe que Impersonate y Undo no cambian el objeto Principal asociado al contexto de llamada actual. En su lugar, la suplantación y la reversión cambian el símbolo asociado al proceso del sistema operativo actual.

Vea también

Referencia

WindowsIdentity

WindowsImpersonationContext

Conceptos

Objetos Principal e Identity

Suplantación de ASP.NET

Utilizar la autenticación de IIS con la suplantación de ASP.NET

Otros recursos

Interoperar con código no administrado