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 de 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 puedes implementar para cuentas de usuario de Windows y que no sean de Windows.

Este artículo se divide en las secciones siguientes:

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 de .aspx que reside en un servidor IIS.
  2. Las credenciales del cliente se pasan a IIS.
  3. IIS autentica el cliente y reenvía el token autenticado junto con la solicitud del cliente al proceso de trabajo de ASP.NET.
  4. 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 de suplantación de la sección de identidad del archivo Web.config en true.

Para obtener más información sobre el flujo de seguridad, consulte ASP.NET Data Flow.

Para obtener más información sobre 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 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 la aplicación desde un punto de vista de 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 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

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 credenciales y envía 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 de Forms-Based 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 desee 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 centralizada, que Proporciona Microsoft, que ofrece un inicio de sesión único y servicios de perfil básicos para sitios miembros. Normalmente, la autenticación de Passport se usa cuando se necesita 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 el máximo rendimiento 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. FileAuthorizationModulees responsable de realizar comprobaciones en Windows Access Control Listas (ACL) 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 del identificador uniforme de recursos (URI). Los espacios de nombres 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 Autorización de ASP.NET.

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 hay 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 suplantación están habilitados, la identidad del usuario es una identidad de Windows (User.Identity.Name = "Domain\username"). Puede comprobar si las identidades pertenecen a roles específicos y restringir el acceso en consecuencia. Por ejemplo:

Código .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 de formularios de este ejemplo) para crear un nuevo GenericPrincipal objeto y asignarlo a la propiedad User de HttpContext. En el código siguiente se muestra esto:

Código .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 tiene 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 .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:

ASP.NET grupo de noticias

Para obtener más información, consulte el siguiente artículo o libros: