Suplantación de ASP.NET

Actualización: noviembre 2007

Al utilizar la suplantación, las aplicaciones ASP.NET pueden ejecutarse con la identidad de Windows (cuenta de usuario) del usuario que realiza la solicitud. La suplantación se utiliza normalmente en aplicaciones que confían en Servicios de Microsoft Internet Information Server (IIS) para autenticar al usuario.

De forma predeterminada, la suplantación ASP.NET está deshabilitada. Si se habilita la suplantación para una aplicación ASP.NET, ésta se ejecuta en el contexto de la identidad cuyo IIS de símbolo de acceso pasa a ASP.NET. Ese símbolo puede ser del usuario autenticado; por ejemplo, un símbolo para un usuario de Windows que tenga iniciada una sesión o un símbolo que IIS proporciona para los usuarios anónimos (normalmente, la identidad IUSR_MACHINENAME).

Cuando se habilita la suplantación, sólo su código de aplicación se ejecuta bajo el contexto del usuario suplantado. Las aplicaciones se compilan y la información de configuración se carga utilizando la identidad del proceso de ASP.NET. Para obtener más información, vea Configurar la identidad de procesos en ASP.NET. La aplicación compilada se coloca en el directorio de archivos temporales de ASP.NET. La identidad de la aplicación que se suplanta necesita acceso de lectura/escritura a este directorio. La identidad de la aplicación que se suplanta también requiere por lo menos acceso de lectura a los archivos en su directorio y subdirectorios de aplicaciones. Para obtener más información, vea Listas de control de acceso (ACL) necesarias para ASP.NET.

Nota:

Como ASP.NET utiliza la identidad de Windows del proceso ASP.NET cuando compila aplicaciones y carga la información de configuración, debe guardar el código de la aplicación y la información de configuración privados entre aplicaciones en un servidor que aloje varias aplicaciones. En Windows Server 2003, puede crear varios grupos de aplicaciones y especificar una identidad única para cada grupo de aplicaciones. Puede restringir a continuación el acceso a los archivos de aplicación utilizando listas de control de acceso (ACL) (si al sistema de archivos se le da formato con NTFS) y estas identidades. Por ejemplo, considere dos aplicaciones, App1 y App2, donde la información en cada aplicación se debe mantener privada. Puede colocar App1 en el grupo de aplicaciones de ApplicationPool1 que tiene una identidad de ID_ApplicationPool1. Puede colocar App2 en el grupo de aplicaciones de ApplicationPool2 que tiene una identidad de ID_ApplicationPool2. La cuenta de ID_ApplicationPool1 recibe acceso a los archivos en App1, pero se le deniega a los archivos en App2. La cuenta de ID_ApplicationPool2 recibe acceso a los archivos en App2, pero se le deniega a los archivos en App1. Tenga en cuenta que no puede hacer esta separación en Windows 2000 o Windows XP Professional, porque en esos sistemas operativos, la identidad del proceso para todas las aplicaciones ASP.NET es una sola.

La suplantación se controla mediante el elemento de configuración identidad. Como con otras directivas de configuración, esta directiva se aplica jerárquicamente. Un archivo de configuración mínima para permitir la suplantación de una aplicación puede ser similar al del ejemplo siguiente:

<configuration>
  <system.web>
    <identity impersonate="true"/>
  </system.web>
</configuration>

También puede agregar compatibilidad para nombres específicos para que ejecuten una aplicación como una identidad configurable, como se muestra en el siguiente ejemplo:

<identity impersonate="true" 
  userName="contoso\Jane" 
  password="E@1bp4!T2" />
Nota:

En el ejemplo anterior, el nombre de usuario y la contraseña se almacenan en texto no cifrado en el archivo de configuración. Para mejorar la seguridad de su aplicación, se recomienda que restrinja el acceso al archivo Web.config mediante una Lista de control de acceso (ACL) y que cifre el elemento de configuración identidad en el archivo Web.config utilizando configuración protegida. Para obtener más información, vea Cifrar información de configuración mediante una configuración protegida.

La configuración que se muestra en el ejemplo permite a toda aplicación ejecutarse utilizando la identidad contoso\Jane, sin tener en cuenta la identidad de la solicitud. Este tipo de suplantación se puede delegar en otro equipo. Es decir, si especifica el nombre de usuario y la contraseña para el usuario suplantado, puede conectarse con otro equipo de la red y solicitar recursos, como por ejemplo archivos o acceso al servidor SQL Server, utilizando seguridad integrada. Si activa la suplantación y no especifica una cuenta de dominio como identidad, no podrá conectarse a otro equipo de la red a menos que su aplicación IIS se configure para utilizar autenticación básica.

Nota:

En Windows 2000, no puede suplantar utilizando las credenciales del usuario específicas para la identidad del proceso de trabajo de ASP.NET. Pero puede activar la suplantación sin especificar las credenciales del usuario concreto de modo que la aplicación suplante a la identidad que determine IIS. Para obtener más información, vea el artículo 810204, "PRB: Per Request Impersonation Does Not Work on Windows 2000 with ASP.NET," en Microsoft Knowledge Base en el sitio https://support.microsoft.com.

Leer la identidad suplantada

El ejemplo de código siguiente muestra cómo leer mediante programación la identidad del usuario suplantado:

Dim username As String = _
    System.Security.Principal.WindowsIdentity.GetCurrent().Name
String username = 
    System.Security.Principal.WindowsIdentity.GetCurrent().Name;

Vea también

Otros recursos

Seguridad de aplicaciones Web ASP.NET