marcos de desarrollo -...
TRANSCRIPT
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 Niveles:
Internet Information Server (IIS)
ASP.NET
Configurable desde web.config
Métodos de autenticación de IIS
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
IIS)
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 a través del servicio Web MS 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 (authentication ticket) y se almacena en una cookie
Autenticación basada en formularios (forms)
IIS ASP.NET
No existe cookie
Usuario
Password
Submit
Cookie
Página
protegida
Existe cookie
loginForm.aspx
Autenticació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
minutos de vigencia de la cookie
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 "/")
UseUri | UseCookies | AutoDetect
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>
public static bool Authenticate(string name, string password);
Autenticación basada en formularios (forms)b) Utilizando un método propio:
Por ejemplo, Login(String loginName, StringclearPassword), 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
Existen varias opciones
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 createPersistentCookie es 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, bool createPersistentCookie);
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)
defaultURL y loginURL se establecen en Web.config
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, bool createPersistentCookie);
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, bool createPersistentCookie);
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 autenticación