Guía de Spring Security en Thuban

De Thubanpedia
Revisión a fecha de 07:05 16 oct 2014; Vivatia (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar


Introducción

El objetivo de este documento es proporcionar una visión general de cómo se maneja la seguridad en el entorno de desarrollo de la plataforma Thuban.

Está dirigido a todos los programadores que quieran iniciarse en el desarrollo bajo esta plataforma y conocer los conceptos básicos de arquitectura y estándares de desarrollo.

¿Qué es Spring Security?

Spring Security provee servicios de seguridad para aplicaciones J2EE. Se destaca por sobre las demás especificaciones de seguridad J2EE de Servlets y EJB, debido a que los desarrolladores encuentran que las mismas carecen de las características necesarias para los típicos escenarios que presentan las aplicaciones Enterprise.


Existen dos grandes divisiones dentro de las aplicaciones de seguridad: autenticación y autorización (o acceso de control). Spring Security se encarga principalmente de ellas:

Autenticación: Es el proceso de establecer que un Principal es quien dice ser. Se conoce como “Principal” a los usuarios o dispositivo que intenta acceder a la aplicación.

Autorización: Se refiere al proceso de decidir si el Principal tiene permitido ejecutar ciertas acciones dentro de la aplicación. Cabe aclarar que para llegar al punto en el cual se necesite una autorización, primero debería de haberse establecido un proceso de autenticación.

¿Cómo empezar a trabajar con Spring Security en Thuban?

ThubanToolkit

Dentro del proyecto ThubanToolkit se encuentran los dos paquetes que hacen uso de la seguridad de la aplicación:


- package com.latintech.thuban.security.filter;

- package org.zkoss.zkplus.spring.security;


ThubanToolkit

Filtros (Filters)

Toda la configuración de Spring Security se realiza a través de filtros. Funciona asociando un JavaBean con otros, por medio de un archivo de configuración XML.

Para comenzar a utilizar los filtros, primero se debe incorporar, en el archivo web.xml, una referencia a la clase FilterToBeanProxy que actúa como proxy para los filtros definidos en el Spring bean context.

Script1.png


Se recomienda organizar los beans en distintos archivos XML y luego incorporarlos al applicationContext-acegi-security.xml del proyecto en el que se vayan a necesitar para mantener un orden apropiado de los mismos. Para ello, en primera instancia, es necesario incorporar al web.xml la siguiente referencia al applicationContext-acegi-security.xml:

Script2.png


Como se mencionó anteriormente, se deberán incorporar al applicationContext-acegi-security.xml los distintos archivos XML que se desean utilizar:

Script3.png


Luego se puede empezar a configurar los filtros dentro de zk-login-application-context.xml.

Zk-login-application-context.xml

Dentro del zk-login-application-context.xml se definen todos los filtros asociados al contexto.

FilterChainProxy

Es el filtro inicializador cuya función principal es indicar o personalizar qué recursos ejecutarán los filtros deseados en filterInvocationDefinitionSource.

Los filtros se ejecutan en el orden en el que son definidos, de esta manera se obtiene un mayor control sobre la cadena de filtros que aplica a un URL particular.

Script4.png


El primer bloque que vemos en la imagen ("/zkau") pertenece al motor AJAX de ZK y el segundo es propio de Thuban

BasicProcessingFilter

Provee un mecanismo de autenticación para responder a forms y headers de tipo BASIC HTTP.

Script5.png

ThubanTokenSecurityFilter

Script6.png

HttpSessionContextIntegrationFilter

El filtro HttpSessionContextIntegrationFilter mantiene el objeto Authentication entre varios requests y lo envía al AuthenticationManager y al AccessDecisionManager cuando sea necesario.

Script7.png

LogoutFilter

El LogoutFilter se utiliza cuando se desea cerrar sesión de manera segura. Se indica en el constructor del bean el lugar donde seremos dirigidos una vez que cerremos la sesión y una lista de beans o "encargados de cerrar sesión". Por defecto se usa SecurityContextLogoutHandler, aunque se puede personalizar.

Script8.png

LdapAuthenticationProcessingFilter

El primer filtro por donde pasará el request HTTP es por el bean LdapAuthenticationProcessingFilter. Este filtro se especializa en manejar el request de autenticación, como por ejemplo la validación de nombre de usuario y contraseña.

Script9.png

SecurityContextHolderAwareRequestFilter

Script10.png

AnonymousProcessingFilter

Este filtro permite que usuarios anónimos tengan acceso a secciones del sistema. Si una página de registro debe permitir el acceso anónimo, en el FilterChainProxy se agrega otra línea donde se coloca el recurso y se le asigna el filtro. Hay que tener en cuenta que ese recurso será accesible siempre y cuando en el FilterSecurityInterceptor también se pueda hacer uso del rol que se indica, que será Roles para identificar al usuario anónimo.

Script11.png

ExceptionTranslationFilter

Maneja cualquier excepción AccessDeniedException y AuthenticationException arrojados dentro de la cadena de filtro. Este filtro es necesario ya que proporciona el puente entre las excepciones de Java y las respuestas HTTP. Sólo se ocupa de mantener la interfaz de usuario, no da una garantía real de la ejecución.


Para utilizar este filtro, es necesario especificar las siguientes propiedades:

authenticationEntryPoint : indica qué controlador debe comenzar el proceso de autenticación si se detecta un AuthenticationException. Hay que considerar que esto también puede cambiar el actual protocolo de “http” a “https” para un inicio de sesión SSL.

portResolver : (opcional) Se utiliza para determinar el “verdadero” puerto por donde se recibió la petición.


Script12.png

ThubanPreAuthenticatedProcessingFilter

Script13.png

PreAuthenticatedAuthenticationProvider

Este filtro se ocupa de la carga del UserDetails.

Script14.png

FilterSecurityInterceptor

El FilterSecurityInterceptor controla el acceso restricto a recursos determinados y el chequeo de autorización. Conoce qué recursos son seguros y qué roles tienen acceso a ellos. FilterSecurityInterceptor cuenta con la ayuda del AuthenticationManager y del AccessDecisionManager para hacer su trabajo.

Script15.png

TokenBasedRemeberMeServices

Este filtro identifica usuarios recordados previamente por medio de una cookie Base64.

Script16.png

ProviderManager

Este filtro actúa de proxy junto con AuthenticationProvider.

Script17.png

CredentialAuthenticationProvider

Script18.png

ThubanAuthenticationProvider

Script19.png

ThubanUserDetailsService

Script20.png

LoggerListener

Este filtro se utiliza para notificar listeners cuando se crea un objeto Logger. Se crea un Logger cada vez que un cliente solicita un nuevo request a través de Logger.getChildLogger (java.lang.String).

Script21.png

ZkEventExceptionFilter

Este filtro se utiliza para lanzar excepciones en la cola de eventos de ZK. Se utiliza usualmente con MethodSecurityInterceptor.

Script22.png