Introducción a la seguridad de ASP.NET
En este artículo se proporciona una introducción a ASP.NET seguridad, se hace referencia a los siguientes espacios de nombres de la biblioteca de clases de Microsoft .NET Framework:
System.Web.Security
System.Web.Principal
Versión original del producto: ASP.NET
Número de KB original: 306590
Resumen
ASP.NET proporciona más control para implementar la seguridad para la aplicación. ASP.NET seguridad funciona junto con la seguridad de 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 incluye una característica de seguridad basada en roles que puede implementar para cuentas de usuario de Windows y que no son de Windows.
Este artículo se divide en las secciones siguientes:
- Flujo de seguridad con una solicitud
- Opciones de configuración relacionadas
- Autenticación
- Autorización
- Seguridad basada en roles
Flujo de seguridad con una solicitud
En los pasos siguientes se describe la secuencia de eventos cuando un cliente realiza una solicitud:
- Un cliente solicita una página de .aspx que reside en un servidor IIS.
- Las credenciales del cliente se pasan a IIS.
- IIS autentica al cliente y reenvía el token autenticado junto con la solicitud del cliente al proceso de trabajo de ASP.NET.
- En función del token autenticado de IIS y de la configuración de la aplicación web, ASP.NET decide si suplantar a un usuario en el subproceso que está procesando la solicitud. En una diferencia distinta entre active Server Pages (ASP) y ASP.NET, ASP.NET ya no suplanta al usuario autenticado de forma predeterminada. Para habilitar la suplantación, debe establecer 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 ASP.NET Flujo de datos.
Para obtener más información sobre la suplantación en ASP.NET, consulte Cómo implementar la suplantación en una aplicación de ASP.NET.
Opciones de configuración relacionadas
IIS mantiene las opciones de configuración relacionadas con la seguridad en la metabase de IIS. Sin embargo, ASP.NET mantiene las opciones de configuración de seguridad (y otras) en los archivos de configuración del lenguaje de marcado extensible (XML). Aunque esto simplifica generalmente la implementación de la aplicación desde el punto de vista de la seguridad, el modelo de seguridad que adopta la aplicación requiere la configuración correcta de la metabase de IIS y la aplicación de ASP.NET a través de su archivo de configuración (Web.config).
Las secciones de configuración siguientes están relacionadas con ASP.NET seguridad:
Autenticación
La autenticación es el proceso por el que se obtienen credenciales de identificación, como el nombre y la contraseña del usuario, y se validan esas credenciales con alguna autoridad.
ASP.NET proporciona cuatro proveedores de autenticación:
- Autenticación de formularios
- Autenticación de Windows
- Autenticación de Passport
- Autenticación predeterminada
autenticación de formularios
La autenticación de formularios hace referencia a un sistema en el que las solicitudes no autenticadas se redirigen a un formulario de lenguaje de marcado de hipertexto (HTML) en el que los usuarios escriben sus credenciales. Después de que el usuario proporcione las credenciales y envíe el formulario, la aplicación autentica la solicitud y el sistema emite un vale de autorización en forma de cookie. Esta cookie contiene las credenciales o una clave para volver a adquirir la identidad. Las solicitudes posteriores del explorador incluyen automáticamente la cookie.
Para obtener más información sobre la autenticación de formularios, vea El proveedor de autenticación de formularios.
Para obtener más información sobre la autenticación de formularios en ASP.NET, vea How To Implement Forms-Based Authentication in Your ASP.NET Application by Using C#.NET (Cómo implementar la autenticación basada en formularios en la aplicación de ASP.NET mediante C#.NET).
Autenticación de Windows
En 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 usar autenticación de Windows es que requiere una codificación mínima. Es posible que quiera usar autenticación de Windows para suplantar la cuenta de usuario de Windows que IIS autentica antes de entregar la solicitud a ASP.NET.
Para obtener más información sobre autenticación de Windows, vea El proveedor WindowsAuthenticationModule.
Autenticación de Passport
La autenticación de Passport es un servicio de autenticación centralizado, que proporciona Microsoft, que ofrece un inicio de sesión único y servicios de perfil principales para sitios miembros. Normalmente, la autenticación de Passport se usa cuando se necesita la funcionalidad de inicio de sesión único en varios dominios.
Para obtener más información sobre la autenticación de Passport, consulte El proveedor de autenticación de Passport.
Autenticación predeterminada
La autenticación predeterminada se usa cuando no desea ninguna seguridad en la aplicación web; se requiere acceso anónimo para este proveedor de seguridad. Entre todos los proveedores de autenticación, la autenticación predeterminada proporciona un rendimiento máximo para la aplicación. Este proveedor de autenticación también se usa cuando se usa su propio módulo de seguridad personalizado.
Autorización
La autorización es el proceso que comprueba si el usuario autenticado tiene acceso a los recursos solicitados.
ASP.NET ofrece los siguientes proveedores de autorización:
Autorización de archivos
La FileAuthorizationModule
clase realiza la autorización de archivos y está activa cuando se usa autenticación de Windows. FileAuthorizationModule
es responsable de realizar comprobaciones en las listas de control de acceso (ACL) de Windows para determinar si un usuario debe tener acceso.
Autorización de direcciones URL
La UrlAuthorizationModule
clase realiza la autorización del localizador uniforme de recursos (URL), que controla la autorización en función del espacio de nombres uniforme de identificador de recursos (URI). Los espacios de nombres de URI pueden ser diferentes de las rutas de acceso de archivos y carpetas físicas que usan los permisos NTFS.
UrlAuthorizationModule
implementa aserciones de autorización positivas y negativas; es decir, puede usar el módulo para permitir o denegar de forma selectiva el acceso a partes arbitrarias del espacio de nombres URI para usuarios, roles (como administrador, evaluadores y administradores) y verbos (como GET
y POST
).
Para obtener más información sobre la autorización en ASP.NET, consulte ASP.NET Autorización.
Seguridad basada en roles
La seguridad basada en roles en ASP.NET es similar a la seguridad basada en roles que usan Microsoft COM+ y Microsoft Transaction Server (MTS), aunque existen diferencias importantes. La seguridad basada en roles en ASP.NET no se limita a las cuentas y grupos de Windows. Por ejemplo, si autenticación de Windows y la suplantación están habilitadas, la identidad del usuario es una identidad de Windows (User.Identity.Name = "Domain\username"
). Puede comprobar las identidades de pertenencia a roles específicos y restringir el acceso en consecuencia. Por ejemplo:
Código de .NET de Visual Basic
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 .NET de Visual C#
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 usa la autenticación de formularios, los roles no se asignan al usuario autenticado; Debe hacerlo mediante programación. Para asignar roles al usuario autenticado, use el OnAuthenticate
evento del módulo de autenticación (que es el módulo de autenticación forms de este ejemplo) para crear un nuevo GenericPrincipal
objeto y asignarlo a la propiedad User de HttpContext
. El código siguiente ilustra lo siguiente:
Código de .NET de Visual Basic
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 .NET de Visual C#
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 un rol específico y restringir el acceso en consecuencia, use el código siguiente (o similar) en las páginas de .aspx:
Código de .NET de Visual Basic
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 .NET de Visual C#
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 más información sobre la seguridad basada en roles, consulte Seguridad basada en roles.
Referencias
Para obtener más información general sobre ASP.NET, consulte el siguiente grupo de noticias:
Para obtener más información, consulte el siguiente artículo o libros:
PRB: Request.ServerVariables("LOGON_USER") devuelve una cadena vacía en ASP.NET
Reilly, Douglas J. Designing Microsoft ASP.NET Applications. Microsoft Press, 2001.
Esposito, Dino. Creación de soluciones web con ASP.NET y ADO.NET. Microsoft Press, 2001.