seguridad de las aplicaciones web con spring security 3.x
DESCRIPTION
Desde una aplicación web simple, previamente desarrollada, basada en la serie televisiva expediente X (X-Files), el objetivo será establecer la autenticación y autorización de usuarios de recursos de la aplicación web, como securizar la invocación de los métodos de los componentes de negocio. Se establecerá una configuración de seguridad mínima inicial, que se completará con mecanismos más sofisticados, a continuación. Todo ello, haciendo hincapié en las novedades de la versión 3.x de Spring Security como el uso de SPEL, anotaciones, espacio de nombres, configuración Java, etc. Los asistentes podrán ver muchas de las características que implementa Spring Security para establecer mecanismos de seguridad en las aplicaciones JEE. Las herramientas a utilizar serán Spring Tool Suite 3.6, Springframework 3.2, Maven 3 y Spring TC Server 2.9.TRANSCRIPT
MADRID · NOV 21-22 · 2014
Seguridad de las aplicaciones web con Spring Security 3.x
Fernando Redondo Ramírez
@pronoide_fer
MADRID · NOV 21-22 · 2014
Roadmap
• ¿Quien soy?
• Una pequeña
introducción a Spring
Security
• Manos a la obra
• Más allá…
MADRID · NOV 21-22 · 2014
Whoami• Emprendedor y gestor de pronoide desde 2003
• Formador Java & Friends (Java EE, Spring, Groovy, Maven,
Jenkins, Sonar, Weblogic, Jboss, Websphere, Discotecas y demás )
• Haciendo cosas con Java desde 1999
• Ingeniero Informático
• Felizmente casado y padre de dos hijos ;)
• Quise ser físico después de ser informático y me
encantaban la serie de expedientes X
MADRID · NOV 21-22 · 2014
Breve Introducción a Spring Security
• ¿No es la seguridad una característica estándar de Java EE? Si, por supuesto. Pero:
• La seguridad Java EE ⇒ Esta basada en restricciones
• La seguridad Java EE ⇒ Solo define un perímetro de seguridad
• La seguridad Java EE ⇒ sus características dependen en última instancia de cada Servidor de Aplicaciones Server (Reinos, SSO, Cifrado, etc)
• La seguridad Java EE ⇒ Las aplicaciones securizadas con Java EE no se pueden transportar fácilmente entre plataformas diferentes o versiones distintas de un servidor
• La seguridad Java EE ⇒ Difícil de adaptar a Web 2.0 o a requerimientos cambiantes
MADRID · NOV 21-22 · 2014
• ¿Por qué utilizar Spring Security?
Porque:
• Spring Security ⇒ Basado en conceder permisos
• Spring Security ⇒ Seguridad tanto perimetral
como jerárquica
• Spring Security ⇒ Las características son
independientes del servidor de aplicaciones
• Spring Security ⇒ Aplicaciones Java EE seguras y
transportables
• Spring Security ⇒ Adaptabilidad and versatilidad
Breve Introducción a Spring Security
MADRID · NOV 21-22 · 2014
Breve Introducción a Spring Security
• ¡Arquitectura y se acabó!
Spring Security 3Clases y estructuras
SecurityContextHolderSecurityContextAuthentication
GrantedAuthority
Peticiones Web
Seguridad Web/HTTP
Cadena de filtros de seguridad
Autentificación
AuthenticationManager
AuthenticationProviders
UserDetailsService
Autorización
AccessDecisionManager
Voters
AfterInvocationManager
Métodos de Negocio
Seguridad en invocación de los métodos de los Objetos de Negocio
Proxies/Interceptores de Securidad
MADRID · NOV 21-22 · 2014
Tu próxima misión
¡Necesito seguridad en
la aplicación de los
Expedientes X!
MADRID · NOV 21-22 · 2014
¡Manos a la obra! (Más tarde en casa)
Antes de empezar, hay que…
1. Instalar git en tu equipo http://git-scm.com/book/en/Getting-Started-Installing-Git
2. Descargar Spring Tool Suite 3.5/3.6 https://spring.io/tools/sts/all
3. Arrancar Spring Tool Suite (STS) y elegir o crear
un workspace (recordar ejecutarlo con un JDK)
4. Descargar http://pronoide.com/downloads/codemotion2014-spring-
security-xfiles.zip y descomprimirlo en la carpeta del
workspace.
5. ¡Ve a tu ritmo! Es bastante fácil…
MADRID · NOV 21-22 · 2014
La webapp de los Expedientes X
Importar la webapp (File/Import/Git/Proyect from Git)
MADRID · NOV 21-22 · 2014
La webapp de los Expedientes X¡Ejecutarla!
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
i. Configurar un filtro interceptor para todas las peticiones web
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
ii. Crear un nuevo fichero de configuración de Spring beans
con una configuración mínima inicial y cargar vía web.xml
context parameter
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
iii. Configurar explícitamente los mecanismos de login / logout
iv. Arreglar problemas con recursos, imagenes y ficheros CSS
MADRID · NOV 21-22 · 2014
La webapp de los Expedientes X
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
v. Encriptar las claves de los usuarios vía Spring Security Crypto
Module
• Cifrar claves
• Configurar el algoritmo y el campo de salt. Luego usar dichas
claves en el fichero de configuración de seguridad
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
vi. Añadir la característica Remember Me al proceso de login
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
vii. Asegurar el canal de transporte (HTTPS)
• Establecer restricciones y puertos
• Configurar servidor tomcat (crear el connector SSL )
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
viii. Gestionar la expiración de sesiones
ix. Manejar la concurrencia de sessiones
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
x. Usar la librería de etiquetas de JSP (Spring Security Taglibs)
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en una webapp
xi. Uso de SpEL para proteger URLs (Spring Expression
Language)
xii. Uso de SpEL con las etiquetas de Spring Security
MADRID · NOV 21-22 · 2014
¡Pero que has hecho!
¿Sólo hay seguridad en el
acceso a los recursos
Web? ¿Eso es lo mejor
que lo puedes hacer?
Prueba esta URL y observa lo que ocurre:
https://localhost:8443/fbi/xfiles/declassify?id=0
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en los métodos de negocio
xii. Asegurar las invocaciones a los métodos de negocio
mediantes las Anotaciones de Spring Security
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en los métodos de negocio
xiii. Asegurar las invocaciones de métodos con AspectJ pointcuts
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security en los métodos de negocio
xiv. Asegurar las invocaciones de métodos con SpEL (Preinvocación)
MADRID · NOV 21-22 · 2014
¡Mucho mejor! Pero…
¿Qué haces viendo expedientes que
no son tuyos?
¿Por qué eres capaz de acceder al
expediente de tu hermana?
¿Y por qué accedes a ciertas horas
de la noche?
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security de forma jerárquica
xiv. Asegurar las invocaciones de métodos con SpEL (Postinvocación)
xiv. Asegurar las invocaciones de métodos con SpEL (Filtrar resultados)
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security de forma jerárquica
xvii. Personalización de los votantes de acceso
• Codificar un nuevo votante
MADRID · NOV 21-22 · 2014
Etapa: Configurar Spring Security de forma jerárquica
xviii.Personalización de los votantes de acceso (continuación)
• Descartar la configuración automática de Spring Security y mostrar la real
• Personalizar el comportamiento del Access Decision Manager
MADRID · NOV 21-22 · 2014
Etapa: Spring Security Bola Extra 1
xix. Personalización de la cadena de filtros de seguridad (Ejemplo A)
• Crear un filtro personalizado
• Colocarlo en la cadena de filtros
MADRID · NOV 21-22 · 2014
Etapa: Spring Security Bola Extra 2
xix. Personalización de la cadena de filtros de seguridad (Ejemplo B)
• Crear un filtro personalizado
• Colocarlo en la cadena de filtros
MADRID · NOV 21-22 · 2014
El Fumador (The smoking man)
Todas estas características de
Spring Security están bastante
bien, pero siempre me quedará
usar el ataque Java2:
<%System.exit(0);%>
MADRID · NOV 21-22 · 2014
Más allá…
• Configuraciones explicitas y no implicitas
• Gestión de ACL’s
• Autentificación con DataSources, LDAP, X509, OPENID, Java EE, etc
• Captchas
• Single Sign On
• Java Config
“… in most of my work, the laws of physics rarely seems to apply.”
Fox Mulder 1x01 "Pilot"
MADRID · NOV 21-22 · 2014
¡Gracias!@pronoide_fer
https://github.com/fredondo/
http://pronoide.es
MADRID · NOV 21-22 · 2014
Apendice: ¡Manos a la obra(en casa)! Navegar a través del código del proyecto con git_presenter
1. Instalar jruby o rubyhttp://jruby.org/getting-startedhttps://www.ruby-lang.org/en/installation/
2. Instalar git presenter (gem install git_presenter)
3. Cuando el codigo este preparado ejecutar el comando"git-presenter init"
4. Una vez inicializado se puede empezar la presentación con "git-presenter start"
5. Después usar los siguientes comandos para navegar por la presentación• next/n: move to the next slide (commit)
• back/b: move to the back slide (commit)
• end/e: move to the end of presentation
• start/s: move to the start of presentation
• list/l : list slides in presentation
• help/h: display this message