2. Índice
• ¿Quién soy?
• Breve Introducción a Spring Security 3
• ¡Manos a la obra!
• Más allá del taller
• Enlaces
• Preguntas
3. ¿Quién soy?
• Emprendedor y empresario en Pronoide
desde 2003
• Formador Java & Friends
• Haciendo cosas con Java desde 1999
• Ingeniero técnico informático
• Casado y padre de dos hijos
(la segunda hija podría estar naciendo ahora… ¡uff!)
4. Breve Introducción a Spring Security 3
• ¿La seguridad JEE no es estándar? Sí, pero:
1. Seguridad JEE ⇒ Basada en restricciones
(Constraints)
2. Seguridad JEE ⇒ Exclusivamente perimetral
3. Seguridad JEE ⇒ Funcionalidades dependientes de
cada Servidor de Aplicaciones (Realms, SSO, Cifrado,
etc.)
4. Seguridad JEE ⇒ Aplicaciones JEE no transportables
entre plataformas o versiones del mismo servidor
5. Seguridad JEE ⇒ Difícil de adaptar a para
aplicaciones Web 2.0 y/o nuevos requerimientos
5. Breve Introducción a Spring Security 3
• ¿La seguridad JEE no es estándar? Sí, pero:
1. Spring Security ⇒ Basada en otorgar permisos
2. Spring Security ⇒ Perimetral y jerárquica
3. Spring Security ⇒ Funcionalidades
independientes del Servidor de Aplicaciones
4. Spring Security ⇒ Aplicaciones JEE
transportables
5. Spring Security ⇒ Versátil y adaptable
6. Breve Introducción a Spring Security 3
Arquitectura (¡y se acabó!)
Peticiones Web Métodos Negocio
Business Object (Method) Security
Web/HTTP Security
Proxies/Interceptores de
Cadena de filtros de seguridad
seguridad
Seguridad Aplicaciones SecurityContextHolder
SecurityContext
Spring Security 3 Authentication
GrantedAuthority
Autentificación Autorización
AuthenticationManager AccessDecisionManager
AuthenticationProviders Voters
UserDetailsService AfterInvocationManager
7. ¡Manos a la obra!
¡¡Necesito seguridad
en la aplicación de
los Expedientes X!!
Notas
1. Descargar http://pronoide.com/descargas/fbi.war
2. Importar war en STS 2.8
3. Ejecutar la aplicación
4. Entrar en http://localhost:8080/fbi/index.jsp
8. Etapa: Configurar Spring Security en la aplicación web
i. Configurar el filtro interceptor de las peticiones web
9. Etapa: Configurar Spring Security en la aplicación web
ii. Crear el fichero para la configuración de seguridad
con una seguridad mínima y cargarlo en el web.xml
10. Etapa: Configurar Spring Security en la aplicación web
iii. Configurar el login/logout explícitamente
iv. Solucionar problemas de recursos, CSS e imágenes
11. Etapa: Configurar Spring Security en la aplicación web
v. Proteger contraseñas de los usuarios encriptándolas
• Generar claves con Spring Basic Crypto Module
• Poner las claves cifradas y configurar el algoritmo y el salt
13. Etapa: Configurar Spring Security en la aplicación web
vii. Seguridad en el canal de transporte (HTTPS)
• Configurar restricciones y puertos
• Crear conector SSL en Servidor
14. Etapa: Configurar Spring Security en la aplicación web
viii. Control de la expiración de sesiones
ix. Control de la concurrencia de sesiones
15. Etapa: Configurar Spring Security en la aplicación web
x. Uso de la librería de etiquetas (Spring Security Taglibs)
16. Etapa: Configurar Spring Security en la aplicación web
xi. Uso Expresiones SpEL para proteger URL’s
xii. Uso Expresiones SpEL con etiquetas Security Taglib
17. ¡Pero que has hecho!
¿¿Sólo hay seguridad
en el acceso a los
recursos web??
Prueba y verás:
https://localhost:8443/fbi/expedientesx
/clasificar?id=1
18. Etapa: Configurar Spring Security en Servicios de Negocio
xiii. Seguridad en la invocación de métodos de negocio
con anotaciones Spring Security
19. Etapa: Configurar Spring Security en Servicios de Negocio
xiv. Seguridad en la invocación de métodos de negocio
con anotaciones JSR-250
20. Etapa: Configurar Spring Security en Servicios de Negocio
xv. Seguridad en la invocación de métodos de negocio
con Pointcuts de AspectJ
21. Etapa: Configurar Spring Security en Servicios de Negocio
xvi. Seguridad en la invocación de métodos de negocio
con Expresiones SpEL (Preinvocación)
22. Mucho mejor pero…
¿¿Qué haces consultando
expedientes que no son tuyos??
¿¿Cómo es que puedes ver el de
tu hermana??
¿¿… y a estas horas??
23. Etapa: Configurar Spring Security de forma jerárquica
xvii.Seguridad en la invocación de métodos de negocio
con Expresiones SpEL (Postinvocación)
24. Etapa: Configurar Spring Security de forma jerárquica
xviii.Seguridad en la invocación de métodos de negocio
con Expresiones SpEL (Filtro de resultados)
25. Etapa: Configurar Spring Security de forma jerárquica
xix. Utilización del sistema de votantes
• Codificar un votante
26. Etapa: Configurar Spring Security de forma jerárquica
xix. Utilización del sistema de votantes (cont.)
• Explicitar la configuración del espacio de nombres Security
• Personalizar la configuración del accessDecisionManager
27. Etapa: Configurar Spring Security de forma jerárquica
xx. Personalizar la cadena de filtros de seguridad
• Crear un filtro para recordar el usuario que hace login
28. Etapa: Configurar Spring Security de forma jerárquica
xx. Personalizar la cadena de filtros de seguridad (cont.)
• Crear un filtro para evitar el uso del botón “volver” tras
hacer logout
29. The Smoking Man
Todo esto de Spring Security
esta muy bien, pero siempre
me quedará el ataque Java2
<%System.exit(0);%>
30. Más allá del taller. A partir de aquí…
• Configuraciones explícitas no implícitas
• Gestión de ACL’s
• Autentificación vía DataSources, LDAP,
X509, OPENID, JEE, etc
• Captcha
• Single Sign On
• Secure Remoting
• “... en la mayoría de mi trabajo, las leyes de
la física rara vez se aplican.” Mulder 1x01 "Pilot"
32. Referencias
• Spring Security 3.1 Reference
http://bit.ly/uQFyUY
• JSR-250 Annotations
http://en.wikipedia.org/wiki/JSR_250
• Spring SpEL
http://bit.ly/xIuueQ
• Spring Security Common Built-In Expressions
http://bit.ly/worFP0
• Spring Security Adding Custom filters
http://bit.ly/z2vQWQ
• Constantes Spring Security
http://bit.ly/yszYqm
• Clasificación de la información por países
http://bit.ly/zLCoNT