ASP.NET implementa esquemas de autenticación adicionales utilizando proveedores de autenticación, que son distintos de los esquemas de IIS y se aplican únicamente después de estos últimos. Para empezar veremos un par de conceptos sobre seguridad en ASP.NET:

Autenticación: Es el mecanismo para validar las credenciales de usuario (Nombre y Clave) contra el acceso de un sitio web. Este mecanismo generalmente representa una interfaz de solicitud y validación de credenciales de usuarios, para aquellos usuarios que intentan acceder a un sitio web protegido.

Autorización: Es el mecanismo que establece permisos de acceso a recursos dentro del sitio Web para usuarios ya autenticados. Este mecanismo toma como patrón base el sistema tradicional de Roles y Reglas de Acceso, donde cada Rol contiene un conjunto de reglas de acceso para usar dentro del sitio Web.

Tipo de autenticación a usar:
Form (por formulario): El proveedor de autenticación por formularios es un esquema de autenticación que permite a la aplicación recopilar credenciales utilizando un formulario HTML directamente del cliente. El cliente envía las credenciales directamente al código de la aplicación para la autenticación. Si una solicitud de un recurso protegido no contiene la cookie, la aplicación redirige el cliente a la página de inicio de sesión.

Ventajas

  • Permite esquemas de autenticación personalizados.
  • No requiere cuentas de Windows.

Desventajas

  • Está expuesto a atacantes a menos que se utilice SSL/TLS.
  • Sólo funciona con recursos asignados a Aspnet_isapi.dll.

Implementación: Para implementar la autenticación personalizada utilizamos las clases e interfaces:

Clase Membership.- Proporciona los servicios de suscripción en general para la autenticación.

Clase MembershipUser.- Proporciona información sobre un usuario en concreto.

Clase MembershipProvider.- Maneja todas las operaciones que se puede hacer con los usuarios; como crear, borrar, editar, etc. Es una interfaz entre ASP.NET y la base de datos.

Interfaz IIdentity.- Encapsula toda la información sobre el usuario o entidad que está siendo validado en su nivel más básico.

Interfaz IPrincipal.- Representa el contexto de seguridad del usuario, indica si el usuario está autenticado o en un rol determinado.

Para realizar la implementación seguiré los pasos siguientes:

1.-      Crear una base de datos para implementar la autenticación.- Aquí hay que crear una tabla usuarios, la que permitirá el acceso a la base de datos una vez estos estén registrados y autenticados.

2.-      Implementar un proveedor de autenticación personalizado.- Aquí crearemos las clases necesarias para implementar la autenticación personalizada.

3.-      Crear páginas de login y de inicio de sesión.- Para implementar la autenticación por formularios, se debe crear su propia página de inicio de sesión y la dirección URL adonde redirigir clientes no autenticados. Debe crear también su propio esquema para autenticación de cuentas en el caso de que existan roles.

4.-      Configurar la aplicación asp.net para utilizar el proveedor de autenticación personalizado (web.config y global.asax).
Archivo Web.config utilizando autenticación por formularios con proveedor de autenticación personalizado:
<!– Web.config file –>
<system.web>
<authentication mode="Forms">
<forms loginUrl="/login.aspx" defaultUrl=”/Home” />
</authentication>
</system.web>
<membership defaultProvider="MiProveedor">
<providers>
<clear/>
<add name="MiProveedor" type="AutenticacionPersonalizada.Seguridad.ProveedorAutenticacion"/>
</providers>
</membership>

Archivo global.asax utilizando autenticación por formularios con proveedor de autenticación personalizado:
<!—Global.asax –>
protected void Application_PostAuthenticateRequest(object sender, EventArgs e){
if (Request.IsAuthenticated) {
var identity=
new IdentityPersonalizado(
HttpContext.Current.User.Identity);
var principal=new PrincipalPersonalizado(identity);
HttpContext.Current.User = principal;
}
}

Descargar codigo de GitHub

Julio Cesar Ruperti Ortiz
Alumno del curso Microsoft MCSD
Tajamar
2015-2016