Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

SeguridaddelaaplicacinparaservletsyJSP(pginaactivasjava) Autenticacin de Servlets (java) Usuarios y roles. Autenticacin declarativa. Portabilidad Tipos de autenticacin Bsica. Digest. Basada en el formulario.

mulario. SSL y certificados. Elementos de seguridad de aplicaciones web. Autenticacin controlada. (usada por el sistema)

Autenticacin con servlets Bsicamente puede considerarse este esquema: 1. Un usuario intenta obtener acceso a un recurso protegido como una pgina JSP. 2. Si el usuario es autenticado, el servlet brinda acceso a la pgina, si no pregunta por usuario y password. 3. Si el usuario y password no puede ser autenticado, se presenta un mensaje y se da la oportunidad de ingresar nuevamente el usuario y password.

Este esquema puede completarse con: quin pregunta por el usuario y password, quin es el responsable de la autenticacin, cmo se realiza la autenticacin o cuantas veces puede el usuario intentar ingresar.

Usuarios y roles Un usuario puede cumplir uno o varios roles, por ejemplo el Jefe de Estudios puede ser tambin un Cliente (un padre de familia). Cuando se trabaja con un servidor de aplicaciones Web como el Jakarta-Tomcat (Apache) las restricciones de seguridad que se encuentra en el archivo WEB-INF/WEB.XML asocian roles y recursos protegidos como pginas jsp. Como se muestra en el siguiente ejemplo:

<web-app> ... <security-constraint> <!recursos web que se protegern--> <web-resource-collection> <web-resource-name>RECURSO PROTEGIDO</web-resource-name> <url-pattern>/Criterios.jsp</url-pattern> </web-resource-collection> <auth-constraint> <!Roles que tendrn acceso a los recursos especificados arriba--> <role-name>Diseador-esquemas</role-name> </auth-constraint> </security-constraint> ... <security-constraint> <!recursos web que se protegern--> <web-resource-collection> <web-resource-name>RECURSO PROTEGIDO</web-resource-name> <url-pattern>/Cursos.jsp</url-pattern> </web-resource-collection> <auth-constraint> <!Roles que tendrn acceso a los recursos especificados arriba--> <role-name>Docente</role-name> </auth-constraint> </security-constraint> <web-app>

En este ejemplo se muestra dos restricciones de acceso va WEB.XML para los roles Docente y Diseador de Esquemas. Se puede apreciar la asociacin entre rol y recurso protegido. Las restricciones de seguridad como esta son manejadas con un contenedor de servlets o applicacin como Tomcat en la cual se edita el archivo tomcat-users.xml <tomcat-users> ... <user name="rgomez" password="plomo" roles="docente", "cliente"/> ... </tomcat-users> Luego la clase HttpServletRequest tendr mtodos como: boolean isUserInRole(Usuario) y String getRemoteUser() que accesarn estos datos de seguridad.

Este mecanismo de seguridad que puede implementarse es manejado slo por los contenedores de servlets, es decir, las aplicaciones web, no lo pueden setear. Esto implica que se debe escribir en el archivo XML respectivo. Esta es una desventaja que le da un mayor peso a la autenticacin a medida o programada. Esta alternativa, es fcil de implementar pero poco flexible. Sin embargo, implica no programar la seguridad de acceso a la pgina.

Tipos de autenticacin Una aplicacin basada en servelts puede elegir entre estos tipos de autenticacin que van desde el menos seguro al ms seguro: Bsica Basada en el formulario Digest SSL y certificados

Se puede elegir alguno de estos mtodos especificndolo eb el archivo /WEB_INF/web.xml (de cualquier contenedor de servlets), como se muestra a continuacin:
<web-app> ... <login-config> <auth-method>BASIC</auth-method> <realm-name>Ejemplo de seleccin de autenticacin bsica</realm-name> </login-config> ... </web-app>

La autenticacin bsica est definida en la especificacin HTTP/1.1. Cuando un usuario requiere accesar a un recurso protegido, el servidor solicita el usuario y el password. Sin embargo, este mtodo tiene la deficiencia de que los passwords son transmitidos usando base64 encoding que no posee encriptacin.2

La autenticacin digest es similar a la bsica excepto que utiliza encriptacin para proteger los passwords. En realidad, la autenticacin digest transmite un valor hash del password y no el password en s.3

La autenticacin basada en el formulario permite disear la pgina de acceso. Trabaja en forma similar a la autenticacin bsica pero utiliza una pgina de acceso que se muestra en lugar de una ventana de dilogo y una pgina de error si la identificacin en negativa. Por otro lado, los passwords son transmitidos como texto puro al igual que la autenticacin bsica. Sin embargo, si es posible establecer autenticacin segura como se explicar en el punto relativa a la seguridad del sistema, tema del presente proyecto.
2 3

Cfr. HTTP/1.1 specification (ftp://ftp.isi.edu/in-notes/rfc2617.txt.) Cfr. HTTP/1.1 specification (ftp://ftp.isi.edu/in-notes/rfc2617.txt.) 4 Cfr. SSL (http://home.netscape.com/eng/ssl3/3-SPEC.HTM.)

A diferencia de la autenticacin digest, la autenticacin basada en el formulario se define en el especificacin del servlet y no la especificacin HTTP. SSL (secure sockets layer) es un mecanismo de transporte de informacin para asegurar su privacidad y la integridad de la data mediante encriptacin. Adicionalmente, permite la verificacin de la identidad del cliente y del servidor.4 El detalle de cmo aadir seguridad SSL a un servidor web, depende del servidor web para servlets, por ejemplo, Resin, Apache Tomcat, Servlet Exec y otros. La autenticacin mediante certificados de cliente est implementada en SSL y requiere que el cliente tenga un certificado de llave pblica. Tambin se puede dar seguridad a los recursos web mediante el uso de Realms, como se usa con Tomcat, los cuales dan la posibilidad de proteger un recurso con una restriccin de seguridad definida y luego definir roles de seguridad que pueda accesar a este recurso.

Autenticacin programada Programar la autenticacin es una buena alternativa si se busca portabilidad y/o control total. Con este tipo de autenticacin no hay dependencia con el servidor web o contenedor de servlets. Por otro lado, da algo ms de trabajo que utilizar la seguridad del contenedor. Requiere la implementacin de una API propia. La idea es proteger las pginas JSP con un tag customizado como este:
<!Pgina JSP protegida --> ... <%@ taglib='/WEB-INF/tlds/security' prefix='security' %> ... <security:forzarLogin loginPage='/login.jsp' errorPage='/error.jsp'/> <!El resto de la pgina es accesada slo si el usuario se logeo a la sesin. ...

El tag forzarLogin busca un usuario en el mbito de una sesin. Si el usuario est en la sesin el tag no hace nada. Si no lo est, el tag lo enva a la pgina de autenticacin. La pgina de autenticacin est en el atributo loginPage. Si el login falla el control se enva a la pgina de error (error.jsp). Si el login es correcto el usuario es creado y colocado dentro de una sesin y se muestra el resto de la pgina.

DIAG. La pgina de login enva el login a un servlet . El servlet autenticar el usuario y password y redireccionar a la pgina protegida o la pgina de error segn los resultados de la autenticacin. La implementacin del tag ser algo similar al cdigo que se muestra en el anexo 4.

ANEXO 4 (Implementacin de tag de seguridad) package tags; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import javax.servlet.jsp.JspException; import javax.servlet.jsp.PageContext; import javax.servlet.jsp.tagext.TagSupport; public class ForzarLoginTag extends TagSupport { private String loginPag, errorPag; public void setLoginPag(String loginPag) { this.loginPag = loginPag; } public void setErrorPag(String errorPag) { this.errorPag = errorPag; } public int doFinTag() throws JspException { HttpSession session = pageContext.getSession(); HttpServletRequest req = (HttpServletRequest)pageContext. getRequest(); String pagProtegida = req.getRequestURI(); if(session.getAttribute("usuario") == null) { session.setAttribute("login-pag", loginPag); session.setAttribute("error-pag", errorPag); session.setAttribute("pag-protegida", pagProtegida); try { pageContext.forward(loginPag); return SKIP_PAG; } catch(Exception ex) { throw new JspException(ex.getMessage()); } } return TRAB_PAG; } public void release() { loginPag = errorPag = null; } }

Como puede observarse con este simple tag que puede ser implementado en la pgina JSP que se requiera se obtiene una seguridad de acceso que retorna la pgina solicitada si el usuario est en la sesin, de lo contrario se le enva la pgina de login.

Cfr. OReally Using Tomcat 4 Realms http://www.onjava.com/lpt/a/onjava/2001/07/24/tomcat.html Cfr. The Jakarta Proyect http://swordfish.rdfweb.org:8085/tomcat-docs/security-manager-howto.html

También podría gustarte