Id. de artículo: 306590 - Última revisión: lunes, 29 de octubre de 2007 - Versión: 3.10

INFO: Introducción a la seguridad de ASP.NET

Nota acerca de su sistema operativoEste artículo se aplica a un sistema operativo distinto al que usa. El contenido del artículo que puede que no sea importante para usted, se deshabilitará
Este artículo se publicó anteriormente con el número E306590
Este artículo hace referencia a los siguientes espacios de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Web.Security
  • System.Web.Principal

En esta página

Expandir todo | Contraer todo

Resumen

Este artículo proporciona una introducción a la seguridad de ASP.NET.

Para obtener información general adicional acerca de ASP.NET, consulte el siguiente artículo de Microsoft Knowledge Base:
305140  (http://support.microsoft.com/kb/305140/ ) INFO: Guía básica de ASP.NET

Más información

ASP.NET le otorga un mayor grado de control para implementar la seguridad en su aplicación. La seguridad de ASP.NET funciona en conjunción con la seguridad de Microsoft Internet Information Services (IIS) e incluye servicios de autenticación y autorización para implementar el modelo de seguridad de ASP.NET. ASP.NET también incluyen una característica de seguridad basada en funciones que puede implementar para cuentas de usuario de Microsoft Windows y que no son de Windows.

Este artículo está dividido en las secciones siguientes:

Flujo de seguridad con una solicitud

Los pasos siguientes esquematizan la secuencia de eventos cuando un cliente realiza una solicitud:
  1. Un cliente solicita una página .aspx que reside en un servidor IIS.
  2. Las credenciales del cliente pasan a IIS.
  3. IIS autentica al cliente y reenvía el símbolo (token) autenticado junto con la solicitud del cliente al proceso de trabajo de ASP.NET.
  4. Basándose en el símbolo autenticado procedente de IIS y la configuración de la aplicaciones Web, ASP.NET decide si debe suplantar a un usuario en el subproceso que está procesando la solicitud. A diferencia de lo que ocurre con Microsoft Active Server Pages (ASP), ASP.NET no suplanta de manera predeterminada al usuario autenticado. Para habilitar la representación, hay que configurar el atributo impersonate de la sección de identidad en el archivo Web.config en true.
Para obtener más información sobre el flujo de seguridad, consulte el siguiente tema en la documentación del Kit de desarrollo de software (SDK) de .NET Framework:
Flujo de datos de ASP.NET
http://msdn2.microsoft.com/en-us/library/xa68twcb(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/xa68twcb(vs.71).aspx)
Para obtener información adicional acerca de la suplantación en ASP.NET, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
306158  (http://support.microsoft.com/kb/306158/ ) INFO: Implementar la suplantación en una aplicación ASP.NET

Opciones de configuración relacionadas

IIS mantiene las opciones de configuración relacionadas con la seguridad en la metabase IIS. Sin embargo, ASP.NET mantiene las opciones de la configuración de seguridad (y otras) en los archivos de configuración del Lenguaje de marcado extensible (XML). Aunque esto generalmente simplifica la implementación de su aplicación desde el punto de vista de la seguridad, el modelo de seguridad que su aplicación adopta necesita la configuración correcta de la metabase de IIS y su aplicación ASP.NET a través de su archivo de configuración (Web.config).

Las siguientes secciones de configuración están relacionadas con la seguridad ASP.NET:

Autenticación

La autenticación es el proceso mediante el cual se obtienen credenciales de identificación tales como el nombre de usuario y la contraseña, al tiempo que se validan dichas credenciales ante alguna autoridad.

ASP.NET proporciona cuatro proveedores de autenticación:

Autenticación de formularios

La autenticación de formularios hace referencia a un sistema en el que la solicitudes no autenticadas se redirigen a un formulario de Lenguaje de marcado de hipertexto (HTML) en el que los usuarios escriben sus credenciales. Una vez que el usuario proporciona las credenciales y envía el formulario, la aplicación autentica la solicitud y el sistema emite un vale de autorización en el formulario de una cookie. Esta cookie contiene las credenciales o una clave para readquirir la identidad. Las solicitudes subsiguientes del explorador automáticamente incluyen la cookie.

Para obtener más información sobre la autenticación de formularios, consulte el siguiente tema en la documentación del SDK de .NET Framework:
El proveedor de autenticación de formularios
http://msdn2.microsoft.com/en-us/library/9wff0kyh(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/9wff0kyh(vs.71).aspx)
Para obtener información adicional sobre autenticación de formularios en ASP.NET, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
301240  (http://support.microsoft.com/kb/301240/ ) CÓMO: Implementar autenticación basada en formularios en una aplicación ASP.NET que utiliza C# .NET

Autenticación de Windows

En la autenticación de Windows, IIS realiza la autenticación y el token autenticado se reenvía al proceso de trabajo de ASP.NET. La ventaja de utilizar la autenticación de Windows es que requiere una codificación mínima. Es posible que desee utilizar la autenticación de Windows para suplantar la cuenta de usuario de Windows que IIS autentica antes de ceder la solicitud a ASP.NET.

Para obtener más información sobre la autenticación de Windows, consulte el siguiente tema en la documentación del SDK de .NET Framework:
El proveedor de WindowsAuthenticationModule
http://msdn2.microsoft.com/en-us/library/907hb5w9(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/907hb5w9(vs.71).aspx)

Autenticación Passport

La autenticación Passport es un servicio de autenticación centralizado proporcionado por Microsoft, que ofrece un registro único y servicios de perfil de núcleo para sitios miembros. Habitualmente, la autenticación Passport se utiliza cuando se necesita un registro único en varios dominios.

Para obtener más información sobre la autenticación Passport, consulte el siguiente tema en la documentación del SDK de .NET Framework:
El proveedor de autenticación Passport
http://msdn2.microsoft.com/en-us/library/f8e50t0f(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/f8e50t0f(vs.71).aspx)

Autenticación predeterminada

La autenticación predeterminada se utiliza cuando no se requiere seguridad en una aplicación Web. Para este proveedor de seguridad es necesario un acceso anónimo. Entre todos los proveedores de autenticación, la autenticación predeterminada proporciona el máximo rendimiento para su aplicación. Cuando use su propio módulo de seguridad personalizado, también se utilizará este proveedor de autenticación.

Autorización

La autorización es el proceso que verifica si el usuario autenticado tiene acceso a los recursos solicitados.

ASP.NET proporciona los siguientes proveedores de autorización:

FileAuthorization

La clase FileAuthorizationModule realiza la autorización de archivo y permanece activa cuando se usa la autenticación de Windows. FileAuthorizationModule se ocupa de efectuar comprobaciones en las Listas de control de acceso de Windows (ACL) para determinar si un usuario debe tener acceso.

UrlAuthorization

La clase UrlAuthorizationModule lleva a cabo la autorización del Localizador de recursos universal (URL), que controla la autorización basada en espacio de nombre URI. Los espacios de nombre URI pueden ser bastante diferentes de la carpeta física y rutas de acceso del archivo que utilizan los permisos NTFS.

UrlAuthorizationModule implementa tanto aserciones positivas como negativas; es decir, se puede utilizar el módulo para permitir o denegar el acceso a partes arbitrarias del espacio de nombre URI para usuarios, funciones (como puede ser gestor, evaluadores y administradores) y verbos (como es el caso de GET y POST).

Para obtener más información sobre la autorización en ASP.NET, consulte el siguiente tema en la documentación del SDK de .NET Framework:
Autorización de ASP.NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaspnetauthorization.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaspnetauthorization.asp)

Seguridad basada en funciones

La seguridad basada en funciones en ASP.NET es similar a la seguridad basada en funciones que utilizan Microsoft COM+ y Microsoft Transaction Server (MTS), aunque hay diferencias importantes. La seguridad basada en funciones en ASP.NET no se limita a las cuentas de Windows y grupos. Por ejemplo, si se habilita la autenticación y la suplantación de Windows, la identidad del usuario es una identidad de Windows (User.Identity.Name = "Domain\username"). Resulta posible comprobar las identidades para ser miembro en funciones específicas y restringir el acceso según corresponda. Por ejemplo:

Código de Visual Basic .NET
If User.IsInRole("BUILTIN\Administrators") Then
   Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
   Response.Write("You are a User")
Else
   Response.Write("Invalid user")
End if
				
Código de Visual C# .NET
if ( User.IsInRole("BUILTIN\\Administrators"))
   Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
   Response.Write("You are a User");
else
   Response.Write("Invalid user");
				
Si está utilizando autenticación de formularios, las funciones no se asignan al usuario autenticado. Para ello, resulta preciso programarlo intencionadamente. Para asignar funciones al usuario autenticado, utilice el evento OnAuthenticate del módulo de autenticación (que es el módulo de autenticación de formularios en este ejemplo) para crear un nuevo objeto GenericPrincipal y asignarlo a la propiedad User de HttpContext. El código siguiente muestra lo siguiente:

Código de Visual Basic .NET
Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
   If (Not(HttpContext.Current.User Is Nothing)) Then
      If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
         Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
         Dim myRoles(3) As String
         myRoles(0)= "managers"
         myRoles(1)= "testers"
         myRoles(2)= "developers"
         HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles) 
      End If
   End If
End Sub
				
Código de Visual C# .NET
public void Application_AuthenticateRequest(Object s, EventArgs e)      
{
   if (HttpContext.Current.User != null)
   {
      if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" ) 
      {
         System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
         String[] myRoles = new String[3];
         myRoles[0]= "managers";
         myRoles[1]= "testers";
         myRoles[2]= "developers";
         HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
      }
   }
} 
				
Para comprobar si el usuario está en una función específica y tiene acceso restringido, utilice el siguiente código (o similar) en sus páginas .aspx:

Código de Visual Basic .NET
If User.IsInRole("managers") Then
   Response.Write("You are a Manager")
Else If  User.IsInRole("testers") Then
   Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
   Response.Write("You are a Developer")
End if
				
Código de Visual C# .NET
if (User.IsInRole("managers"))
   Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
   Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
   Response.Write("You are a Developer");
				
Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
306238  (http://support.microsoft.com/kb/306238/ ) CÓMO: Implemente la seguridad basada en funciones con autenticación basada en una aplicación ASP.NET utilizando Visual Basic .NET
Para obtener más información sobre la seguridad basada en funciones, consulte el siguiente tema en la documentación del SDK de .NET Framework:
Seguridad basada en funciones
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconrole-basedsecurity.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconrole-basedsecurity.asp)

Referencias

Para obtener instrucciones sobre seguridad en ASP .NET, consulte el siguiente documento técnico de MSDN:
Autenticación en ASP.NET: Guía de Seguridad .NET
http://msdn2.microsoft.com/en-us/library/ms978378.aspx (http://msdn2.microsoft.com/en-us/library/ms978378.aspx)
Para obtener más información general acerca de ASP.NET, visite el siguiente grupo de noticias de MSDN:
microsoft.public.dotnet.framework.aspnet (http://go.microsoft.com/fwlink/?linkid=5811&clcid=0x409)
Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
311094  (http://support.microsoft.com/kb/311094/ ) ERROR: Aparece el mensaje de error "ConfigurationException" cuando las cuentas suplantadas leen datos de configuración
306359  (http://support.microsoft.com/kb/306359/ ) PRB: Request.ServerVariables("LOGON_USER") devuelve una cadena vacía en ASP.NET
313091  (http://support.microsoft.com/kb/313091/ ) CÓMO: Crear claves utilizando Visual Basic .NET para utilizarlas en autenticación basada en formularios
313116  (http://support.microsoft.com/kb/313116/ ) PRB: Las solicitudes de autenticación de funciones no se dirigen a la página loginUrl
Para obtener más información, consulte los siguientes libros:
Reilly, Douglas J. Designing Microsoft ASP.NET Applications (http://go.microsoft.com/fwlink/?LinkId=8362) . Microsoft Press, 2001.

Esposito, Dino.Building Web Solutions with ASP.NET and ADO.NET (http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?userid=2Z24O3LOY0&isbn=0735613486&itm=4) . Microsoft Press, 2001.

La información de este artículo se refiere a:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
Palabras clave: 
kbproductlink kbarttyperoadmap kbconfig kbinfo kbsecurity kbweb KB306590