Tema 8 Gestión de usuarios

Anuncio
Gestión de una aplicación completa con .NET
Servicio de Informática
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
Tema 4 / Página 1
Gestión de una aplicación completa con .NET
Servicio de Informática
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>
Método
Basado en
Windows
Basado en
Formularios
Microsoft
Passport
Ventajas
Usa la infraestructura de
Windows
Control de acceso a
información crítica
Desventajas
No apropiado para la
mayoría de las aplicac.
Web
Bueno para aplicac. Web
Soporta a todos los tipos de
clientes
Está basada en cookies
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
Tema 4 / Página 2
Gestión de una aplicación completa con .NET
Servicio 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 usuarios,
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,
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
deseada:
<configuration>
<system.web>
<authentication mode="Forms"/>
mode="Forms"
<authorization>
<deny
deny users="?" />
</authorization>
</system.web>
</configuration>
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
nte tabla muestra los atributos válidos para los elementos <Forms>, el cual es
un subelemento de <authentication>, mostrado en el siguiente ejemplo:
ejemplo
Tema 4 / Página 3
Gestión de una aplicación completa con .NET
Servicio de Informática
<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>
(La tabla completa está en http://msdn.microsoft.com/es-es/library/1d3t3c61.aspx)
Atributo
Descripción
Cookieless
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.
cookieless=
"[UseUri |
UseCookies | La opción de AutoDetect hace que ASP.NET determine dinámicamente
AutoDetect | si el navegador soporta cookies o no.
UseDevicePr
ofile]"
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%283CIW7kVWVrwCYQBuAG8Abg
BpAG0AbwAAANsh2gLch8sBAdtVvDPgh8sBAAAvAAAA0%29%29/De
fault.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").
enableCross
AppRedirect
s
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.
Tema 4 / Página 4
Gestión de una aplicación completa con .NET
Servicio de Informática
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
Método usado para proteger los datos de las cookies. Por defecto es
All que usa validación + encriptación.
protection=
"[All|None|
Encryption|V
alidation]"
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.
Si el valor está a true, los Formularios de Autenticación actualizarán
slidingExpirat
periódicamente el tiempo de vida para los tickets del formuario de
ion
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.
Cantidad de tiempo en minutos enteros, después del cual la cookie
timeout
expira. El valor por defecto es 30.
requireSSL
Tema 4 / Página 5
Gestión de una aplicación completa con .NET
Servicio de Informática
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:
Tema 4 / Página 6
Gestión de una aplicación completa con .NET
Servicio de Informática
(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/eses/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)
Tema 4 / Página 7
Gestión de una aplicación completa con .NET
Servicio de Informática
{
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
Tema 4 / Página 8
Gestión de una aplicación completa con .NET
Servicio de Informática
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”.
Tema 4 / Página 9
Gestión de una aplicación completa con .NET
Servicio de Informática
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
Tema 4 / Página 10
Gestión de una aplicación completa con .NET
Servicio de Informática
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-yautorizacion.aspx
http://www.es-asp.net/tutoriales-asp-net/tutorial-61-119/utilizando-los-controles-deinicio-de-sesion.aspx
Diferencia entre Request.IsAuthenticated y User.Identity.IsAuthenticated.
http://es.efreedom.com/Question/1-1379566/Cual-es-la-diferencia-entre-HttpContextCurrent-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/eses/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
Tema 4 / Página 11
Gestión de una aplicación completa con .NET
Servicio de Informática
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.
Tema 4 / Página 12
Gestión de una aplicación completa con .NET
Servicio de Informática
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.
Tema 4 / Página 13
Descargar