Personalización del inicio de sesión de aplicaciones web

Puede crear una página de inicio de sesión de formulario y una página de error.

Antes de empezar

Un cliente web o un navegador pueden autenticar a un usuario en un servidor Web utilizando uno de los siguientes mecanismos:
  • Autenticación básica HTTP: un servidor web solicita al cliente Web que se autentique y el cliente web pasa un ID de usuario y una contraseña en la cabecera HTTP.
  • Autenticación de cliente HTTPS: este mecanismo requiere que un usuario (cliente web) posea un certificado de clave pública. El cliente web envía el certificado a un servidor web que solicita los certificados de cliente. Este mecanismo de autenticación es muy seguro y utiliza el protocolo HTTPS (Hypertext Transfer Protocol) con SSL (Secure Sockets Layer).
  • Autenticación basada en formulario: con este mecanismo de autenticación, un desarrollador puede controlar el diseño de las pantallas de inicio de sesión.

La autenticación básica HTTP (Hypertext Transfer Protocol) transmite una contraseña de usuario desde el cliente web al servidor web en codificación base64 simple. La autenticación basada en formulario transmite la contraseña de usuario desde el navegador al servidor Web en texto plano. Por lo que tanto la autenticación básica HTTP como la autenticación basada en formulario no son muy seguras, a menos que se utilice HTTPS.

El descriptor de despliegue de aplicaciones web contiene información sobre los mecanismos de autenticación que deben utilizarse. Cuando se utiliza la autenticación basada en formulario, el descriptor de despliegue también incluirá entradas para las páginas de inicio de sesión y error. Una página de inicio de sesión puede ser una página HTML o un archivo JSP (JavaServer Pages). Esta página de inicio de sesión se visualizará en el cliente web cuando se acceda a un recursos seguro (servlet, archivo JSP, página HTML) desde la aplicación. Cuando se produzca un error de autenticación, aparecerá la página de error. Puede escribir páginas de inicio de sesión y de error que se ajusten a los requisitos de la aplicación y controlar el diseño de dichas páginas. Durante el ensamblaje de la aplicación, un ensamblador puede establecer el mecanismo de autenticación para la aplicación y establecer las páginas de inicio de sesión y de error en el descriptor de despliegue.

El inicio de sesión de formulario utiliza el método sendRedirect de servlet, que tiene varias implicaciones para el usuario. El método sendRedirect se utiliza en dos ocasiones durante el inicio de sesión de formulario:
  • El método sendRedirect muestra inicialmente la página de inicio de sesión de formulario en el navegador web. Posteriormente redirige el navegador web de nuevo a la página protegida solicitada inicialmente. El método sendRedirect(String URL) insta al navegador web para que utilice la petición GET de HTTP para acceder a la página especificada en la dirección web. Si HTTP POST es la primera solicitud dirigida a un servlet protegido o archivo JSP (JavaServer Pages) y no se ha producido anteriormente una autenticación o inicio de sesión, HTTP POST no se envía a la página solicitada. Sin embargo, HTTP GET sí se envía, ya que el inicio de sesión de formulario utiliza el método sendRedirect, que se comporta como una solicitud HTTP GET que intenta mostrar una página solicitada después del inicio de sesión.
  • Si se utiliza HTTP POST, puede darse el caso de que un formulario HTML coleccione los datos de usuarios y, a continuación, los envíe a archivos JSP o servlets protegidos para que estos sean procesados, aunque los usuarios no estén conectados al recurso. Para evitar esta situación, estructure sus permisos o aplicación web para que los usuarios se vean obligados a utilizar una página de inicio de sesión de formulario antes de que la aplicación realice cualquier acción HTTP POST en los archivos JSP o servlets protegidos.
Nota: Asegúrese de que todos los archivos incluidos en la página de inicio de sesión (como, por ejemplo, las hojas de estilo externas o las imágenes) estén protegidos.

Procedimiento

  1. Cree una página de inicio de sesión basado en formulario con el diseño requerido incluidos los elementos necesarios para realizar la autenticación basada en formulario.
  2. Cree una página de error. Puede programar las páginas de error de modo que se reintente la autenticación o se visualice un mensaje de error adecuado.
  3. Coloque la página de inicio de sesión y la página de error en el archivo web (.war) relativo al directorio superior. Por ejemplo, si la página de inicio de sesión se configura como /login.html en el descriptor de despliegue, debe colocarla en el directorio superior del archivo WAR. Un ensamblador también puede realizar este paso con la herramienta de ensamblaje.
  4. Cree una página de fin de sesión basado en formulario e insértela en la aplicación sólo si la aplicación web requiere un mecanismo de autenticación basado en formulario.

    De forma predeterminada, el URL para la página de cierre de sesión debe apuntar al host al que se realizó la solicitud o a su dominio. De lo contrario, se visualizará una página de cierre de sesión genérica. Si necesita que este URL apunte a un host distinto, es necesario establecer la propiedad com.ibm.websphere.security.logoutExitPageDomainList en el archivo security.xml con una lista de URL que están permitidas para la página de cierre de sesión. Puede elegir permitir que se utilice cualquier página de salida de cierre de sesión estableciendo la propiedad com.ibm.websphere.security.allowAnyLogoutExitPageHost en un valor de true. Si se establece esta propiedad en true, los sistemas pueden quedar expuestos a potenciales ataques de redirección de URL.

Ejemplo: inicio de sesión de formulario

Puede utilizar los recursos de inicio de sesión de WebSphere Application Server para implementar y configurar los procedimientos de inicio de sesión de formulario. Utilice las tecnologías siguientes para las funciones de inicio de sesión de WebSphere Application Server y Java™ Platform, Enterprise Edition (Java EE):
  • Inicio de sesión basado en formulario Java EE
  • Filtro de servlet Java EE con inicio de sesión
  • Extensión de IBM®: inicio de sesión basado en formulario
El ejemplo de inicio de sesión de formulario forma parte del paquete Ejemplos de tecnología. Para obtener más información sobre cómo acceder al ejemplo de inicio de sesión, consulte Acceso a los ejemplos.
Uso del inicio de sesión basado en formulario
Para que la autenticación continúe de forma adecuada, la acción del formulario de inicio de sesión debe tener siempre la acción j_security_check. En el ejemplo siguiente se muestra cómo codificar el formulario en la página HTML:
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="text" name="j_password" autocomplete="off">  
<\form>

Utilice el campo de entrada j_username para obtener el nombre de usuario y utilice el campo de entrada j_password para obtener la contraseña de usuario.

Cuando se recibe una solicitud de un cliente web, el servidor web envía la página de formulario configurada al cliente y conserva la solicitud original. Cuando el servidor web recibe del cliente web la página del formulario cumplimentada, extrae el nombre de usuario y la contraseña del formulario y autentifica el usuario. Después de realizar una autenticación satisfactoria, el servidor web redirige la llamada a la solicitud original. Si la autenticación falla, el servidor web redirige la llamada a la página de error configurada.

En el ejemplo siguiente se representa una página de inicio de sesión en HTML (login.html):
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
		<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
<title> Security FVT Login Page </title>
<body>
<h2>Form Login</h2>
<FORM METHOD=POST ACTION="j_security_check">
<p>
<font size="2"> <strong> Especifique el ID de usuario y la contraseña: </strong></font>
<BR>
<strong> ID de usuario</strong> <input type="text" size="20" name="j_username">
<strong> Contraseña </strong>  <input type="password" size="20" name="j_password" autocomplete="off">
<BR>
<BR>
<font size="2">  <strong> Y luego pulse este botón: </strong></font>
<input type="submit" name="login" value="Login">
</p>

</form>
</body>
</html>
En el ejemplo siguiente se representa una página de error de ejemplo de un archivo JSP:
<!DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
<head><title>Se ha producido un error de autenticación de inicio de sesión por formulario</head></title>
<body>
<H1><B>Se ha producido un error de autenticación de inicio de sesión por formulario</H1></B>
<P>La autenticación puede fallar por diversas razones. Algunas de las razones son:
<OL>
<LI>El ID de usuario o la contraseña pueden haberse especificado incorrectamente; se han escrito incorrectamente o se han utilizado mayúsculas y minúsculas incorrectas.
<LI>El ID de usuario o la contraseña no existen, han caducado o se han inhabilitado.</OL>
</P>
</body>
</html>
Después de que el ensamblador configure la aplicación web para utilizar la autenticación basada en formulario, el descriptor de despliegue contendrá la configuración de inicio de sesión que se muestra a continuación:
<login-config id="LoginConfig_1">
<auth-method>FORM<auth-method>
<realm-name>Ejemplo de área de autenticación basada en formularios</realm-name>
<form-login-config id="FormLoginConfig_1">
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
A continuación se muestra un ejemplo de la estructura de directorios de archivos web (WAR - Web Application Archive) que muestra las páginas de inicio de sesión y de error para la configuración de inicio de sesión indicada más arriba:
META-INF
     META-INF/MANIFEST.MF
     login.html
     error.jsp
     WEB-INF/
     WEB-INF/classes/
     WEB-INF/classes/aServlet.class
Fin de sesión mediante formulario

El fin de sesión mediante formulario es un mecanismo para finalizar la sesión sin tener que cerrar todas las sesiones de navegador web. Después de finalizar la sesión del mecanismo de cierre de sesión de formulario, para acceder a un recurso web protegido es necesario volver a autenticarse. Las especificaciones J2EE no requieren esta característica pero se proporciona como característica adicional de la seguridad de WebSphere Application Server.

Suponga que quiere finalizar una sesión después de haber entrado en una aplicación web y haber realizado algunas acciones. Un fin de sesión mediante formulario funciona de la siguiente manera:
  1. El URI del fin de sesión mediante formulario se especifica en el navegador web y carga el formulario.
  2. El usuario pulsa Enviar en el formulario para salir de la sesión.
  3. El código de seguridad de WebSphere desconecta al usuario. Durante el proceso, el servidor de aplicaciones completa los procesos siguientes:
    1. Borra las cookies LTPA (Lightweight Third Party Authentication) / SSO (inicio único de sesión)
    2. Invalida la sesión HTTP
    3. Elimina el usuario de la memoria caché de autenticación
  4. Al finalizar la sesión, se redirige al usuario a la página de salida de fin de una sesión.

El fin de sesión mediante formulario no requiere ningún atributo de ningún descriptor de despliegue. La página de fin de sesión mediante formulario es un archivo HTML o JSP (JavaServer Pages) que se incluye en la aplicación web. La página de fin de sesión mediante formulario es como la mayoría de los formularios HTML, aunque, como la página de inicio de sesión mediante formulario, tiene un acción post especial. Dicha acción es reconocida por el contenedor web, que la asigna a un servlet interno especial de fin de sesión mediante formulario. La acción post de la página de fin de sesión mediante formulario tiene que ser ibm_security_logout.

Puede especificar una página de salida de fin de sesión en el formulario de fin de sesión y la página de salida puede representar un archivo HTML o JSP en la misma aplicación web a la que se redirige al usuario después de finalizar la sesión. Adicionalmente, la página de salida de fin de sesión permite un URL totalmente calificado con el formato de http://nombrehost:puerto/URL. La página de salida de fin de sesión se especifica como un parámetro de la página de fin de sesión mediante formulario. Si no se especifica ninguna página de fin de sesión, el usuario recibe un mensaje HTML de fin de sesión predeterminado.

A continuación se incluye una muestra de formulario HTML de fin de sesión mediante formulario. Este formulario configura la página de salida de fin de sesión para que, una vez finalizada la sesión, el sistema dirija al usuario de vuelta a la página de inicio de sesión.
<!DOCTYPE HTML PUBliC "-//W3C/DTD HTML 4.0 Transitional//EN">
<html>
				<META HTTP-EQUIV = "Pragma" CONTENT="no-cache">
				<title>Logout Page </title>
		<body>
				<h2>Sample Form Logout</h2>
												<FORM METHOD=POST ACTION="ibm_security_logout" NAME="logout">
						<p>
						<BR>
						<BR>
												<font size="2"><strong> Pulse este botón para cerrar la sesión: </strong></font>
												<input type="submit" name="logout" value="Logout">
												<INPUT TYPE="HIDDEN" name="logoutExitPage" VALUE="/login.html">
						</p>
						</form>
		</body>
</html>

Qué hacer a continuación

Después de desarrollar la página de inicio de sesión y la página de error, éstas deben añadirse a la aplicación Web. Utilice la herramienta de ensamblaje para configurar un mecanismo de autenticación e insertar la página de inicio de sesión y la página de error en el descriptor de despliegue de la aplicación.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_pofolo
File name: tsec_pofolo.html