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
- 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 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.
Procedimiento
Ejemplo: inicio de sesión de formulario
- 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
<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.
<!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>
<!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>
<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>
META-INF
META-INF/MANIFEST.MF
login.html
error.jsp
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/aServlet.class
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.
- El URI del fin de sesión mediante formulario se especifica en el navegador web y carga el formulario.
- El usuario pulsa Enviar en el formulario para salir de la sesión.
- El código de seguridad de WebSphere desconecta al usuario. Durante el
proceso, el servidor de aplicaciones completa los procesos siguientes:
- Borra las cookies LTPA (Lightweight Third Party Authentication) / SSO (inicio único de sesión)
- Invalida la sesión HTTP
- Elimina el usuario de la memoria caché de autenticación
- 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.
<!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>