Marcos de Desarrollo
Objetivos
Saber implementar autenticación basada en
formularios en aplicaciones Web ASP.NET
Saber restringir el acceso a recursos de la aplicación
Web a usuarios no autenticados
Definiciones
Autenticación: proceso mediante el cual se comprueba
que el usuario final es quien dice ser
El usuario debe especificar ciertas credenciales (normalmente
un nombre de usuario y una contraseña) cuya validez se
puede comprobar consultando una lista de datos conocidos. Si las credenciales son correctas, se autentica al usuario; de lo contrario, no se le autentica
Autorización: proceso que consiste en determinar lo que
el usuario puede y no puede hacer en la aplicación
Se realiza una vez que se ha autenticado al usuario También se conoce como "control de acceso"
Autenticación
Autenticación
Niveles:
Internet Information Server (IIS) ASP.NET
Configurable desde web.config
Autenticación Internet Information Server (IIS)
En IIS, se pueden seleccionar los distintos modos de autenticación:
Anónimo
El servidor no realiza autenticación (es la opción que usaremos) Control de autenticación se delega en ASP.NET
Básica
Usuario y contraseña en claro
Digest
Envía un hash de la contraseña
Certificados Digitales
El cliente necesita un certificado digital
Integrada
Se usan las credenciales de la cuenta de Windows (en donde reside el
Autenticación ASP.NET
Modos de autenticación
None
No se realiza autenticación
Acceso anónimo permitido a toda la aplicación Web
Windows
Delega autenticación en IIS (y se utilizaría el mecanismo
seleccionado en IIS)
Es el valor predeterminado
Forms
Autenticación basada en formularios (la que utilizaremos)
Passport
Autenticación basada en formularios (forms)
Solución flexible: se integra fácilmente con la aplicación Web
Es necesario indicarle a ASP.NET a dónde debe redirigir al usuario en caso de que éste solicite acceso a un recurso
protegido. Normalmente se redirige a la página que contiene el formulario para introducir las credenciales de usuario
Una vez el usuario proporciona sus credenciales, es necesario realizar el proceso de validación
ASP.NET proporciona mecanismos de validación, pero también se pueden programar mecanismos propios (e.g. MiniPortal)
Si la validación es correcta, se genera un ticket de autenticación
Autenticación basada en formularios (forms)
IIS ASP.NET No existe cookie Usuario Password Submit Cookie Página protegida Existe cookie loginForm.aspxAutenticación basada en formularios (forms)
Configuración
En IIS: Establecer método de autenticación como
"acceso anónimo" En Web.config <configuration> <system.web> <authentication mode="Forms"> <forms name=".ASPXAUTH" loginUrl="/Authentication.aspx" timeout="30" path="/" defaultUrl="/MainPage.aspx" cookieless="AutoDetect" /> </authentication> </system.web> </configuration>
nombre de la cookie de autenticación URL a la que debe redirigirse la solicitud de inicio de sesión, si no se encuentra ninguna cookie de
autenticación válida
Autenticación basada en formularios (forms)
Configuración
Establecer autenticación IIS como anónima En Web.config <configuration> <system.web> <authentication mode="Forms"> <forms name=".ASPXAUTH" loginUrl="/Authentication.aspx" timeout="30" path="/" defaultUrl="/MainPage.aspx" cookieless="AutoDetect" /> </authentication> </system.web> </configuration>
URL a la que se redirige tras la autenticación, si se había solicitado loginUrl.
Si se había solicitado un recurso protegido, se redirige
automáticamente a él.
ruta de acceso de las cookies emitidas por la aplicación (se recomienda "/")
Autenticación basada en formularios (forms)
El proceso de validar la identidad de un usuario (autenticación) puede realizarse:
a) Utilizando el método Authenticate de la clase
System.Web.Security.FormsAuthentication
b) Utilizando un método propio
c) Utilizando las clases del API Membership
Incluye funcionalidades implementadas para registro de usuarios, cambio de
contraseña, recuperación de contraseña, etc.
Por sencillez, y para comprender mejor el proceso, aquí utilizaremos la opción b) En una aplicación "real" se recomienda la opción c)
Autenticación basada en formularios (forms)
a) Utilizando el método de la clase
System.Web.Security.FormsAuthentication:
Valida contra el archivo Web.config
<authentication mode="Forms"> <forms
loginUrl="~/SignIn.aspx" name=".ASPXAUTH" path="/" defaultUrl="~/Default.aspx">
<credentials passwordFormat="Clear">
<user name="testUser1" password="testPass1"/> <user name="testUser2" password="testPass2"/> </credentials>
</forms>
</authentication>
Autenticación basada en formularios (forms)
b) Utilizando un método propio:
Por ejemplo, Login(String loginName, String
clearPassword), que comprueba las credenciales contra una base de datos
Autenticación basada en formularios (forms)
Tanto si utilizamos el método a) como si utilizamos el
b), una vez hemos determinado que el usuario está
autenticado, debemos indicarlo a la aplicación
ASP.NET
Es necesario generar un ticket de autenticación
Se hace con métodos de la clase FormsAuthentication
Métodos de FormsAuthentication (1)
No realiza el proceso de validación. Supone que las
credenciales de userName han sido comprobadas y son válidas
Marca al usuario userName como "autenticado"
Genera un ticket de autenticación en forma de cookie
Si createPersistentCookiees false, se crea una cookie
temporal (sólo se almacena en la memoria del navegador)
Si es true, se crea una cookie persistente, que se almacena en el
ordenador del cliente
public static void RedirectFromLoginPage(string userName,
Métodos de FormsAuthentication (2)
Redirige automáticamente a la página solicitada (si se
había solicitado una página protegida) o a defaultURL
(si se había accedido al formulario de login -loginURL)
Métodos de FormsAuthentication (3)
No realiza el proceso de validación. Supone que las
credenciales de userName han sido comprobadas y son válidas
Crea una cookie de autenticación para userName y la
añade a la response
No redirige a ninguna página
public static void SetAuthCookie(string userName,
Métodos de FormsAuthentication (4)
No realiza el proceso de validación. Supone que las
credenciales de userName han sido comprobadas y son válidas
Crea una cookie de autenticación para userName, pero
no la añade a la response
No redirige a ninguna página
public static HttpCookie GetAuthCookie(string userName,
Métodos de FormsAuthentication (y 5)
Borra el ticket de autenticación public static void SignOut();
Autorización
Autorización
Es posible controlar de forma
declarativa
a qué
recursos del sitio Web tienen acceso los usuarios
Se configura en el Web.config
e.g. Se deniega el acceso a los usuario anónimos (sólo se
permite acceso al sitio Web a los usuarios autenticados)
Comodines
* : todos los usuarios ? : Usuarios anónimos
<authorization>
<deny users= "?" /> </authorization>
Autorización
Es posible definir control de acceso para recursos
específicos, mediante una secci
ó
n <location>
e.g. se concede permiso de acceso a la página
Register.aspx a todos los usuarios
<location path="Register.aspx"> <system.web> <authorization> <allow users ="*" /> </authorization> </system.web> </location>
Autorización
Política restrictiva:
"Todo lo que no está expresamente permitido, está prohibido" Primero se deniega el acceso a todos los usuarios anónimos
<deny users ="?" />
Luego se da acceso a los recursos que no necesitan
autenticación
Política permisiva:
"Todo lo que no está expresamente prohibido, está permitido" Primero se permite el acceso a todos los recursos
<allow users ="*" />
Luego se indican aquellos recursos que necesitan
Bibliografía
Recomendada:
M. MacDonald, A. Freeman, M. Szpuszta. Pro ASP.Net