ASP.NET de seguridad

En este artículo se proporciona una introducción a ASP.NET seguridad, se refiere a los siguientes espacios de nombres de biblioteca de clases de Microsoft .NET Framework:

  • System.Web.Security
  • System.Web.Principal

Versión del producto original:   ASP.NET
Número 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 ASP.NET de seguridad. ASP.NET también incluye una característica de seguridad basada en roles que se puede implementar para cuentas de usuario Windows y no Windows usuario.

Este artículo se divide en las siguientes secciones:

Flow seguridad con una solicitud

Los siguientes pasos describen 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 el cliente y reenvía el token autenticado junto con la solicitud del cliente al ASP.NET de trabajo.
  4. En función del token autenticado de IIS y las opciones de configuración de la aplicación web, ASP.NET decide si suplanta a un usuario en el subproceso que procesa la solicitud. En una diferencia distinta entre 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 de suplantación de la sección identity del archivoWeb.config en true.

Para obtener más información acerca del flujo de seguridad, vea ASP.NET Data Flow.

Para obtener más información acerca de la suplantación en ASP.NET, vea How to implement suersonation in an ASP.NET application.

IIS mantiene las opciones de configuración relacionadas con la seguridad en la metabase de IIS. Sin embargo, ASP.NET seguridad (y otras) opciones de configuración en archivos de configuración de Lenguaje de marcado extensible (XML). Aunque esto simplifica generalmente la implementación de la aplicación desde un punto de vista de seguridad, el modelo de seguridad que la aplicación adopta requiere la configuración correcta de la metabase de IIS y 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 ASP.NET seguridad:

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 dichas 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. Después de 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 obtener la identidad. Las solicitudes posteriores del explorador incluyen automáticamente la cookie.

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 How to Implement Forms-Based Authentication in Your ASP.NET Application by Using C#.NET.

Autenticación de Windows

En Windows autenticación, IIS realiza la autenticación y el token autenticado se reenvía al proceso ASP.NET trabajo. La ventaja de usar Windows autenticación es que requiere una codificación mínima. Es posible que desee usar Windows autenticación 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 Windows autenticación, vea El proveedor de WindowsAuthenticationModule.

Autenticación de Passport

La autenticación de Passport es un servicio de autenticación centralizada, que Microsoft proporciona, que ofrece un inicio de sesión único y servicios de perfiles principales para los sitios de miembros. Normalmente, la autenticación de Passport se usa cuando 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, vea 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; 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 cuando se usa 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 Windows autenticación. FileAuthorizationModulees responsable de realizar comprobaciones en Windows listas de control de acceso (ACL) para determinar si un usuario debe tener acceso.

Autorización de url

La clase realiza una autorización de localizador uniforme de recursos (URL), que controla la autorización en función del espacio de nombres de identificador UrlAuthorizationModule uniforme de recursos (URI). Los espacios de nombres URI pueden ser diferentes de las rutas de acceso a 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 selectivamente el acceso a partes arbitrarias del espacio de nombres URI para usuarios, roles (como administradores, evaluadores y administradores) y verbos (como GET y POST ).

Para obtener más información acerca de la autorización en ASP.NET, vea ASP.NET Authorization.

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

Visual Basic código .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

Visual C# código .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 evento del módulo de autenticación (que es el módulo de autenticación de formularios de este ejemplo) para crear un nuevo objeto y asignarlo a la propiedad User del OnAuthenticate GenericPrincipal HttpContext . El siguiente código ilustra esto:

Visual Basic código .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

Visual C# código .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 un rol específico y restringir el acceso en consecuencia, use el siguiente código (o similar) en las páginas .aspx:

Visual Basic código .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

Visual C# código .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 sobre la seguridad basada en roles, vea Role-Based Security.

Referencias

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

ASP.NET de noticias

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