Introducción a la seguridad de ASP.NET

En este artículo se proporciona una introducción a la seguridad de ASP.NET, que 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 del producto original:   ASP.NET
Número de KB original:   306590

Resumen

ASP.NET proporciona más control para implementar la seguridad de la aplicación. La seguridad de ASP.NET funciona junto con la seguridad de Internet Information Services (IIS) e incluye los 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 las cuentas de usuario de Windows y las que no son de Windows.

Este artículo se divide en las siguientes secciones:

Flujo de seguridad con una solicitud

En los pasos siguientes se describe 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 se pasan a IIS.
  3. IIS autentica al cliente y reenvía el token autenticado junto con la solicitud del cliente al proceso de trabajo ASP.NET.
  4. Según el token autenticado de IIS y las opciones de 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 distintiva entre las páginas Active Server (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 Identity del archivo de Web.config en true.

Para obtener más información acerca del flujo de seguridad, vea flujo de datos de ASP.net.

Para obtener más información acerca de la suplantación en ASP.NET, vea cómo implementar la suplantación en una aplicación de ASP.net.

IIS mantiene las opciones de configuración relacionadas con la seguridad en la metabase de IIS. Sin embargo, ASP.NET mantiene los valores de configuración de seguridad (y otros) en los archivos de configuración del lenguaje de marcado extensible (XML). Aunque normalmente esto simplifica 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 de la 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 de ASP.NET:

Autenticación

La autenticación es el proceso mediante el cual se obtienen credenciales de identificación, como el nombre y la contraseña del usuario, y se validan las credenciales con 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 las 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 forma de una cookie. Esta cookie contiene las credenciales o una clave para volver a adquirir la identidad. Las solicitudes posteriores del explorador incluyen la cookie automáticamente.

Para obtener más información acerca de 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 cómo implementar la autenticación basada en formularios en su aplicación de ASP.net mediante 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 usar la autenticación de Windows es que requiere una codificación mínima. Es posible que desee usar la 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 acerca de la 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 los 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 acerca de la autenticación de Passport, consulte el proveedor de autenticación Passport.

Autenticación predeterminada

La autenticación predeterminada se usa cuando no se desea ninguna seguridad en la aplicación Web; el acceso anónimo es necesario para este proveedor de seguridad. Entre todos los proveedores de autenticación, la autenticación predeterminada proporciona el máximo rendimiento para la aplicación. Este proveedor de autenticación también se usa al usar su propio módulo de seguridad personalizado.

Authorization

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 la autenticación de Windows. FileAuthorizationModulees responsable de realizar comprobaciones de las listas de control de acceso (ACL) de Windows para determinar si un usuario debe tener acceso.

Autorización de dirección URL

La UrlAuthorizationModule clase realiza la autorización del localizador uniforme de recursos (URL), que controla la autorización basándose en el espacio de nombres del identificador uniforme de recursos (URI). Los espacios de nombres URI pueden ser diferentes de las rutas de archivos y carpetas físicas que usan los permisos de NTFS.

UrlAuthorizationModuleimplementa aserciones de autorización positivas y negativas; es decir, puede usar el módulo para permitir o denegar selectivamente 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 acerca de la autorización en ASP.NET, consulte ASP.net Authorization.

Seguridad basada en roles

La seguridad basada en roles de ASP.NET es similar a la seguridad basada en roles que usan Microsoft COM+ y Microsoft Transaction Server (MTS), aunque hay diferencias importantes. La seguridad basada en roles de ASP.NET no se limita a los grupos y las cuentas de Windows. Por ejemplo, si la 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 para la pertenencia a 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 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 de formularios en este ejemplo) para crear un nuevo GenericPrincipal objeto y asignarlo a la propiedad de usuario del HttpContext . El siguiente código ilustra esto:

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 tiene una función específica y restringir el acceso según corresponda, use el código siguiente (o similar) en las 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 más información acerca de la seguridad basada en roles, consulte seguridad basada en roles.

Referencias

Para obtener más información general acerca de ASP.NET, consulte el siguiente grupo de noticias:

Grupo de noticias de ASP.NET

Para obtener más información, vea el artículo o los libros siguientes: