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.
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Seguridad de las aplicaciones web con Spring Security 3.x
1. Fernando Redondo Ramírez
@pronoide_fer
Seguridad de las aplicaciones
web con Spring Security 3.x
MADRID · NOV 21-22 · 2014
2. Roadmap
MADRID · NOV 21-22 · 2014
• ¿Quien soy?
• Una pequeña
introducción a Spring
Security
• Manos a la obra
• Más allá…
3. 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
4. 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
5. Breve Introducción a Spring Security
• ¿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
MADRID · NOV 21-22 · 2014
6. Breve Introducción a Spring Security
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
• ¡Arquitectura y se acabó!
Spring Security 3
Clases y estructuras
SecurityContextHolder
SecurityContext
Authentication
GrantedAuthority
Peticiones Web
Seguridad Web/HTTP
Cadena de filtros de seguridad
Autentificación
AuthenticationManager
AuthenticationProviders
UserDetailsService
Autorización
AccessDecisionManager
Voters
AfterInvocationManager
7. Tu próxima misión
¡Necesito seguridad en
la aplicación de los
Expedientes X!
MADRID · NOV 21-22 · 2014
8. ¡Manos a la obra! (Más tarde en casa)
MADRID · NOV 21-22 · 2014
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…
9. La webapp de los Expedientes X
Importar la webapp (File/Import/Git/Proyect from Git)
MADRID · NOV 21-22 · 2014
10. La webapp de los Expedientes X
MADRID · NOV 21-22 · 2014
¡Ejecutarla!
11. Etapa: Configurar Spring Security en una webapp
i. Configurar un filtro interceptor para todas las peticiones web
MADRID · NOV 21-22 · 2014
12. 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
13. 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
14. La webapp de los Expedientes X
MADRID · NOV 21-22 · 2014
15. Etapa: Configurar Spring Security en una webapp
v. Encriptar las claves de los usuarios vía Spring Security Crypto
MADRID · NOV 21-22 · 2014
Module
• Cifrar claves
• Configurar el algoritmo y el campo de salt. Luego usar dichas
claves en el fichero de configuración de seguridad
16. Etapa: Configurar Spring Security en una webapp
vi. Añadir la característica Remember Me al proceso de login
MADRID · NOV 21-22 · 2014
17. Etapa: Configurar Spring Security en una webapp
vii. Asegurar el canal de transporte (HTTPS)
MADRID · NOV 21-22 · 2014
• Establecer restricciones y puertos
• Configurar servidor tomcat (crear el connector SSL )
18. Etapa: Configurar Spring Security en una webapp
MADRID · NOV 21-22 · 2014
viii. Gestionar la expiración de sesiones
ix. Manejar la concurrencia de sessiones
19. Etapa: Configurar Spring Security en una webapp
x. Usar la librería de etiquetas de JSP (Spring Security Taglibs)
MADRID · NOV 21-22 · 2014
20. Etapa: Configurar Spring Security en una webapp
xi. Uso de SpEL para proteger URLs (Spring Expression
MADRID · NOV 21-22 · 2014
Language)
xii. Uso de SpEL con las etiquetas de Spring Security
21. ¡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
22. 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
23. 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
24. 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
25. ¡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
26. 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
27. Etapa: Configurar Spring Security de forma jerárquica
xvii. Personalización de los votantes de acceso
MADRID · NOV 21-22 · 2014
• Codificar un nuevo votante
28. 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
29. Etapa: Spring Security Bola Extra 1
xix. Personalización de la cadena de filtros de seguridad (Ejemplo A)
MADRID · NOV 21-22 · 2014
• Crear un filtro personalizado
• Colocarlo en la cadena de filtros
30. Etapa: Spring Security Bola Extra 2
xix. Personalización de la cadena de filtros de seguridad (Ejemplo B)
MADRID · NOV 21-22 · 2014
• Crear un filtro personalizado
• Colocarlo en la cadena de filtros
31. 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
32. 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
34. Apendice: ¡Manos a la obra(en casa)!
Navegar a través del código del proyecto con git_presenter
1. Instalar jruby o ruby
MADRID · NOV 21-22 · 2014
http://jruby.org/getting-started
https://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