Share via


Representar y revertir

En ocasiones, puede que sea necesario obtener un símbolo (token) de cuenta de Windows NT que represente 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), representar 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 representar 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, vea 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);
    [Visual Basic]
    Dim ImpersonatedIdentity As New WindowsIdentity(hToken)
    
  3. Comience la representació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();
    [Visual Basic]
    WindowsImpersonationContext MyImpersonation = ImpersonatedIdentity.Impersonate()
    
  4. Cuando deje de necesitar la representación, llame al método WindowsImpersonationContext.Undo para revertirla, como se muestra en el código siguiente.

    MyImpersonation.Undo();
    [Visual Basic]
    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 símbolo 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 representación desactivada. En este caso, el proceso se ejecuta bajo una cuenta configurada en Servicios de Internet Information Server (IIS) mientras el principal 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 representación y la reversión cambian el símbolo asociado al proceso del sistema operativo actual..

Vea también

WindowsIdentity | WindowsImpersonationContext | Objetos Principal e Identity | Interoperar con código no administrado | Representación de ASP.NET | Utilizar autenticación de IIS con la representación de ASP.NET