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.SecuritySystem.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 de seguridad con una solicitud
- Configuración relacionada Configuración
- Autenticación
- Authorization
- Seguridad basada en roles
Flow seguridad con una solicitud
Los siguientes pasos describen la secuencia de eventos cuando un cliente realiza una solicitud:
- Un cliente solicita una página .aspx que reside en un servidor IIS.
- Las credenciales del cliente se pasan a IIS.
- IIS autentica el cliente y reenvía el token autenticado junto con la solicitud del cliente al ASP.NET de trabajo.
- 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.
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 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
- 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 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:
Para obtener más información, vea el siguiente artículo o libros:
PRB: Request.ServerVariables("LOGON_USER") Devuelve 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.