tema 8: identificaciÓn y control de usuarios€¦ · tema 8: identificaciÓn y control de usuarios...

13
Gestión de una aplicación completa con .NET Servicio de Informática Tema 4 / Página 1 TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales proporcionadas por el usuario. Valida esas credenciales. Autorización: Dada una credencial autenticada, determinar los derechos de acceso a los recursos. Los accesos pueden ser dados o denegados a un usuario en particular o basado en un rol AUTENTICACIÓN Basado en Windows: o La solicitud de la página pasa por IIS. Si IIS valida exitosamente la credencial, entonces se devuelve la página solicitada. Basado en Formularios (el que se desarrolla en este tema) o Las solicitudes no autenticadas son redireccionadas a un formulario de login. Después de validar la credencial se envía al cliente una cookie de autenticación Basado en Microsoft Passport o Servicio de autenticación centralizado. Passport es un Web Service. Para activar un servicio de autenticación de ASP .NET, debes configurar el elemento <authentication> en el archivo de configuración de la aplicación. Este elemento puede tomar cualquiera de los valores listados en la siguiente tabla: Valor Descripción None Ningún servicio de autenticación ASP .NET esta activo. Observad que el servicio de autenticación de IIS puede estar todavía presente. Windows Los servicios de autenticación de ASP .NET adjuntan un WindowsPrincipal (System.Security.Principal.WindowsPrincipal) a la petición actual para permitir la autorización contra grupos o usuarios de NT Forms Los servicios de autenticación de ASP.NET gestionan las cookies y redireccionan a los usuarios no autenticados a una página de registro. Esto a menudo se usa conjuntamente con la opción del IIS de permitir acceso anónimo a la aplicación. Passport Los servicios de autenticación de ASP.NET proporcionan un formato

Upload: others

Post on 16-Aug-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 1

TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales proporcionadas por el usuario. Valida esas credenciales. Autorización: Dada una credencial autenticada, determinar los derechos de acceso a los recursos. Los accesos pueden ser dados o denegados a un usuario en particular o basado en un rol AUTENTICACIÓN • Basado en Windows:

o La solicitud de la página pasa por IIS. Si IIS valida exitosamente la credencial, entonces se devuelve la página solicitada.

• Basado en Formularios (el que se desarrolla en este tema) o Las solicitudes no autenticadas son redireccionadas a un formulario de

login. Después de validar la credencial se envía al cliente una cookie de autenticación

• Basado en Microsoft Passport o Servicio de autenticación centralizado. Passport es un Web Service.

Para activar un servicio de autenticación de ASP .NET, debes configurar el elemento <authentication> en el archivo de configuración de la aplicación. Este elemento puede tomar cualquiera de los valores listados en la siguiente tabla:

Valor Descripción

None

Ningún servicio de autenticación ASP .NET esta activo. Observad que el servicio de autenticación de IIS puede estar todavía presente.

Windows

Los servicios de autenticación de ASP .NET adjuntan un WindowsPrincipal (System.Security.Principal.WindowsPrincipal) a la petición actual para permitir la autorización contra grupos o usuarios de NT

Forms

Los servicios de autenticación de ASP.NET gestionan las cookies y redireccionan a los usuarios no autenticados a una página de registro. Esto a menudo se usa conjuntamente con la opción del IIS de permitir acceso anónimo a la aplicación.

Passport Los servicios de autenticación de ASP.NET proporcionan un formato

Page 2: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 2

conveniente alrededor del servicio ofrecido por el Passport SDK, el cual debe estar instalado en la máquina.

Por ejemplo, el siguiente archivo de configuración permite autenticación basada en formularios (cookies) para una aplicación: <configuration> <system.web> <authentication mode="Forms"/> </system.web> </configuration>

MMééttooddoo VVeennttaajjaass DDeessvveennttaajjaass

Basado en Windows

� Usa la infraestructura de Windows

� Control de acceso a información crítica

� No apropiado para la mayoría de las aplicac. Web

Basado en Formularios

� Bueno para aplicac. Web � Soporta a todos los tipos de

clientes � Está basada en cookies

Microsoft Passport

� Un solo login para muchos sitios Web

� No se necesita guardar info del usuario en BD

� Está basado en cookies � Tiene un costo

económico

Page 3: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NETServicio de Informática

2. AUTENTICACIÓN BASADA EN FORMULARIOS(teoria)

La autenticación basada en formularios es un servicio de autenticación de ASP .NET que permite a las aplicaciones proporcionar su propia Interfaz de Usuario para el inicio de sesión y hacer su propia verificación de credenciales. ASP .NET autentica usuarinicio de sesión y ejecuta toda la administración de cookies necesaria. Este tipo de autenticación es una técnica muy popular usada en muchos sitios web. Para que una aplicación utilice autenticación basada en formularios, tendremos que fijar el valor de <authentication> a Formsel acceso a usuarios anónimos. El siguiente ejemplo muestra cómo puede realizarse esto en el fichero Web.config para la aplicación deseada: Los administradores usaremos la autenticación basada en formularios para configurar el nombre de la cookie a utilizar, el tipo de protección, la URL de la página de login, tiempo de vida de la cookie y la ruta a utilizar para la cookie emitida. La siguiente tabla muestra los atributos válidos para los elementos <Forms>, el cual es un subelemento de <authentication>, mostrado en el siguiente

Gestión de una aplicación completa con .NET

Tema 4 / Página 3

AUTENTICACIÓN BASADA EN FORMULARIOS

La autenticación basada en formularios es un servicio de autenticación de ASP .NET que permite a las aplicaciones proporcionar su propia Interfaz de Usuario para el inicio de sesión y hacer su propia verificación de credenciales.

ASP .NET autentica usuarios, redirecciona usarios no autenticados a la página de inicio de sesión y ejecuta toda la administración de cookies necesaria. Este tipo de autenticación es una técnica muy popular usada en muchos sitios web.

Para que una aplicación utilice autenticación basada en formularios, tendremos que fijar el valor de <authentication> a Forms, y denegar el acceso a usuarios anónimos. El siguiente ejemplo muestra cómo puede realizarse esto en el fichero Web.config para la aplicación

Los administradores usaremos la autenticación basada en formularios para configurar el nombre de la cookie a utilizar, el tipo de protección, la URL de la página de login, tiempo de vida de la cookie y la ruta a utilizar para la cookie emitida.

nte tabla muestra los atributos válidos para los elementos <Forms>, el cual es un subelemento de <authentication>, mostrado en el siguiente ejemplo

<configuration> <system.web> <authentication mode="Forms" <authorization> <deny users="?" </authorization> </system.web> </configuration>

AUTENTICACIÓN BASADA EN FORMULARIOS

La autenticación basada en formularios es un servicio de autenticación de ASP .NET que permite a las aplicaciones proporcionar su propia Interfaz de Usuario para el inicio

ios, redirecciona usarios no autenticados a la página de inicio de sesión y ejecuta toda la administración de cookies necesaria. Este tipo de autenticación es una técnica muy popular usada en muchos sitios web.

Los administradores usaremos la autenticación basada en formularios para configurar el nombre de la cookie a utilizar, el tipo de protección, la URL de la página de login,

nte tabla muestra los atributos válidos para los elementos <Forms>, el cual es ejemplo:

mode="Forms"/>

deny users="?" />

Page 4: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 4

(La tabla completa está en http://msdn.microsoft.com/es-es/library/1d3t3c61.aspx)

Atributo Descripción

Cookieless

cookieless=

"[UseUri | UseCookies | AutoDetect | UseDeviceProfile]"

Los formularios de autenticación de ASP.NET 2.0 pueden almacenar los tickets de autenticación de los formularios con o sin la representación en la URL de una cookie. El valor por defecto de UseDeviceProfile indica que ASP .NET determina dónde almacenar el ticket basado en el perfil del navegador pre-calculado.

La opción de AutoDetect hace que ASP.NET determine dinámicamente si el navegador soporta cookies o no.

UseUri y UseCookies fuerza el uso de tickets sin y con cookies, respectivamente.

UseUri modifica la url a algo como:

http://localhost:60194/tema8/%28F%283CIW7kVWVrwCYQBuAG8AbgBpAG0AbwAAANsh2gLch8sBAdtVvDPgh8sBAAAvAAAA0%29%29/Default.aspx

defaultUrl URL por defecto a la que la petición es redireccionada después de un ingreso válido. Este valor se usa si no existe una URL de redirección en la Autenticación por Formularios.

domain Domain en la HttpCookie que contiene los tickets del formulario de autenticación.

Configurar este atributo explícitamente permite a las aplicaciones compartir la misma cookie siempre que las aplicaciones compartan una porción común de un espacio de nombres de DNS (ej: appA.ua.es y appB.ua.es podrían compartir una cookie si el domain attribute tiene el valor "ua.es").

enableCrossAppRedirects

Los formularios de autenticación de ASP.NET 2.0 permiten enviar los tickets de autenticación del formulario entre aplicaciones tanto en una variable cadena-petición como en una variable POST de formulario.

<authentication mode="Forms"> <forms

name=".ASPXCOOKIEDEMO" loginUrl="login.aspx" defaultUrl="default.aspx"

protection="All" timeout="30" path="/" requireSSL="false"

slidingExpiration="true" enableCrossAppRedirects="false"

cookieless="UseDeviceProfile" domain=""> </forms> </authentication>

Page 5: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 5

Poner este atributo a true permite al FormsAuthenticationModule extraer el ticket tanto de una cadena-petición como de una variable POST de formulario.

loginUrl Especifica la URL a la cual la petición es redireccionada para usuarios no autenticados.

name Nombre de la cookie HTTP a usar para propósitos de autenticación.

path Ruta que usa la cookie emitida. El valor por defecto es “/”

Protection

protection= "[All|None| Encryption|Validation]"

Método usado para proteger los datos de las cookies. Por defecto es All que usa validación + encriptación.

requireSSL Si el valor está a true, la Autenticación por Formularios configura el bit de seguridad en la cookie del formulario de autenticación. Los navegadores “conformistas” sólo devolverán la cookie a ASP .NET a través de una conexion SSL.

slidingExpiration

Si el valor está a true, los Formularios de Autenticación actualizarán periódicamente el tiempo de vida para los tickets del formuario de autenticación. Esto ocurre independientemente de si el ticket está o no contenido en una cookie, o en los formatos sin cookie en la URL.

timeout Cantidad de tiempo en minutos enteros, después del cual la cookie expira. El valor por defecto es 30.

Page 6: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 6

3. AUTENTICACIÓN BASADA EN FORMULARIOS (práctica)

Escribimos esto en nuestro web.config:

<configuration> <system.web> ...

<authentication mode="Forms" >

<forms

name = "ejemplo"

loginUrl ="login.aspx"

defaultUrl ="default.aspx"></forms>

</authentication>

<authorization>

<deny users="?" />

</authorization>

...

</configuration> </system.web>

Ahora debemos montar dos páginas aspx: Login y default.aspx.

Login.aspx debería tener un formulario. Pero por sencillez vamos a poner un botón que al hacer click haga:

protected void Boton_Click(object sender, EventArgs e)

{

FormsAuthentication.RedirectFromLoginPage("anonimo", true);

}

Donde “anónimo” es un string nombre del usuario. True es la contestación a si queremos crear una cookie persistente, es decir, si queremos que el sistema nos recuerde. El nombre de la cookie será “ejemplo” (definido en web.config).

Ahora creamos “default.aspx” con un botón de salir y cerrar la sesión.

protected void Boton_Click(object sender, EventArgs e)

{

FormsAuthentication.SignOut();

Response.Redirect("Login.aspx");

}

Ahora si queremos ir a default.aspx, antes tendremos que pasar por login.aspx. Al logarnos (simplemente haciendo click) generamos esta cookie:

Page 7: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 7

(Hoy es 18 de nov y son las 21:07)

Para poder estudiar todos los métodos y propiedades de FormsAuthentication debemos ir a http://msdn.microsoft.com/es-es/library/system.web.security.formsauthentication_members%28v=VS.80%29.aspx

Otro sistema que se puede usar es en nuestro web.config:

<configuration> <system.web> ...

<authentication mode="Forms" >

<forms

name = "ejemplo"

loginUrl ="login.aspx"

defaultUrl ="default.aspx"></forms>

</authentication>

<authorization>

<deny users="?" />

</authorization>

...

</configuration> </system.web>

Ahora cualquiera se puede pasear por nuestro sitio web.

Para evitarlo contamos un login.aspx con un botón (a reemplazar por un formulario)

protected void Boton_Click(object sender, EventArgs e)

{

FormsAuthentication.SetAuthCookie("anonimo", true);

Response.Redirect("Default.aspx");

}

Y en las páginas donde sólo tengan acceso los autentificados (en este caso defautl.aspx), debemos poner:

protected void Pre_Init(object sender, EventArgs e)

Page 8: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 8

{

if (!User.Identity.IsAuthenticated)

Response.Redirect("Login.aspx");

}

4. UTILIZANDO LOS CONTROLES DE INICIO DE SESIÓN Y LA CLASE LDAP.

Login:

El control Login es el control de inicio de sesión más simple y soporta las situaciones más comunes; identificarse utilizando un nombre de usuario y una contraseña. El control incluye los cuadros de texto usuario y contraseña y una casilla de verificación para los usuarios que deseen comprometer la seguridad de la contraseña almacenándola en la máquina. El control expone propiedades a través de las cuales puede cambiar el texto y la apariencia del control.

También puede agregar vínculos para administrar el registro o la recuperación de contraseña.

El control Login interactúa de forma predeterminada con el componente miembro ASP.NET para la autenticación.

Usando el login con la clase LDap:

1.- Creamos el control login.

2.- Añadimos la clase claseLDap como referencia.

3.- En eventos controlamos el authenticate

Page 9: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 9

Y el código de authenticate sería algo como:

protected void Login1_Authenticate(object sender,

AuthenticateEventArgs e)

{

ClaseLDAP ldap = new ClaseLDAP();

if (ldap.Validar(Login1.UserName, Login1.Password))

FormsAuthentication.RedirectFromLoginPage(Login1.UserName,

Login1.RememberMeSet);

}

LoginView:

Es útil para administrar el contenido que muestra para los usuarios autenticados y para los no autenticados. LoginView muestra el estado del inicio de sesión a través de mostrar las plantillas AnonymousTemplate y LoggedlnTemplate. El control muestra una plantilla diferente dependiendo del estado del usuario.

1.- Arrastro en modo diseño el LoginView.

2.- Arrastro en la caja señalada con un círculo un control Login.

3.- En la parte marcada señalo la vista LoggedInTemplate.

Colocamos un botón con el texto “Log Out”.

Page 10: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 10

Ahora el código podría ser algo como:

protected void Login1_Authenticate(object sender,

AuthenticateEventArgs e)

{

Login miLogin = (Login)sender;

ClaseLDAP ldap = new ClaseLDAP();

if (ldap.Validar(miLogin.UserName, miLogin.Password))

FormsAuthentication.RedirectFromLoginPage(miLogin.UserName,

miLogin.RememberMeSet);

}

LoginStatus: Muestra si el usuario ha iniciado sesión o no. A los usuarios que no han iniciado sesión se les pide que lo hagan, y a los usuarios que han iniciado sesión se les pide que cierren la sesión. Recuerdo que por código usamos User.Identity.IsAuthenticated para saber si el usuario está identificado. Y para cerrar la sesión usamos FormsAuthentication.SignOut() LoginName: El control LoginName muestra el nombre de inicio de sesión del usuario. Por código podemos usar User.Identity.Name

Otros controles que no vamos a usar por culpa del LDAP:

PasswordRecovery: Soporta la función de los sitios Web que consiste en enviar contraseñas a los clientes cuando las olvidan. Recopila el nombre de la cuenta del usuario y después continúa con una pregunta de seguridad (siempre y cuando esta función este configurada correctamente). El control envía la contraseña por correo electrónico o crea una nueva. ChangePassword: Proporciona a los usuarios la opción de cambiar sus contraseñas. Un usuario autenticado puede cambiar su contraseña proporcionando la contraseña original y la nueva (junto con confirmación de la contraseña nueva). CreateUserWizard: Recopila información de los usuarios para que pueda configurar una cuenta miembro de ASP.NET para cada usuario. El control recopila un nombre de usuario, una

Page 11: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 11

contraseña, dirección de correo electrónico, una pregunta de seguridad y una respuesta pregunta de seguridad.

5. EN INTERNET. Manual sobre autenticación y autorización http://www.es-asp.net/tutoriales-asp-net/tutorial-61-118/autenticacion-y-autorizacion.aspx http://www.es-asp.net/tutoriales-asp-net/tutorial-61-119/utilizando-los-controles-de-inicio-de-sesion.aspx Diferencia entre Request.IsAuthenticated y User.Identity.IsAuthenticated. http://es.efreedom.com/Question/1-1379566/Cual-es-la-diferencia-entre-HttpContext-Current-Request-IsAuthenticated-y-HttpContext-Current-User-Identity-IsAuthenticated Sobre Microsoft Passport https://accountservices.passport.net/ppnetworkhome.srf?vv=900&mkt=ES-ES&lc=3082 Para poder estudiar todos los métodos y propiedades de FormsAuthentication: http://msdn.microsoft.com/es-es/library/system.web.security.formsauthentication_members%28v=VS.80%29.aspx Atributos válidos para los elementos <Forms> http://msdn.microsoft.com/es-es/library/1d3t3c61.aspx

Page 12: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 12

6. EJERCICIO. LOGIN.ASPX Se pide un control de LoginView que: 1.- cuando sea anónimo nos dé un control Login. Este ocupará el 100% del espacio de la plantilla. Tiene un cellspacing de 10 de cellpading de 10. El color del fondo de la cabecera es #30424A La identificación la hará con la clase LDAP. En el cuadro de avisos aparecerá lo que nos hemos rellenado de forma incorrecta. Si al identificarte no lo consigues aparecerá el siguiente mensaje: “Su usuario / contraseña no son correctos. Por favor contacte con "Servicio de Informática"

En cuanto se identifique irá a la página del ejercicio anterior. El tema será de color rojo.

En la parte señalada vendrá el nombre del usuario que se ha identificado. Al pulsar en salir, primero se abandona la sesión y luego nos enviará a la página de login.aspx.

Page 13: TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS€¦ · TEMA 8: IDENTIFICACIÓN Y CONTROL DE USUARIOS 1. AUTENTICACIÓN Y AUTORIZACIÓN DEFINICIONES Autenticación: Acepta credenciales

Gestión de una aplicación completa con .NET

Servicio de Informática

Tema 4 / Página 13

2.- Cuando se esté identificado el LoginView nos mostrará:

Finalizar sesión además de finalizarla recargará la página de login.aspx. DEFAULT.ASPX ¿Y si intentamos ir a la página principal del curso sin identificarte?

Observa cómo ha desaparecido la columna de editar y el botón de nuevo. Salir sigue llevándonos a www.ua.es. Aparece el texto “Usuario desconocido”. Consideraremos el idioma.