miércoles, 29 de julio de 2009

¿Qué es Spring Security?

Spring Security proporciona servicios de seguridad para aplicaciones de software empresariales basados en J2EE, enfocado particularmente sobre proyectos construidos usando SpringFramework, si ya estas familiarizado con Spring(y particularmente con los principios de inyección de dependencias) será más rápido aprender Spring Security.

Como sabemos la seguridad comprende dos operaciones: La primera operación es conocida como "autenticación", por el cual se establece si un usuario(que quiere realizar una acción en nuestra aplicación) es quien dice ser, y la segunda operación es llamada "autorización" que se refiere al proceso de decidir si a un usuario le es permitido realizar una determinada acción en nuestra aplicación.

Para llegar al punto donde una acción de autorización es necesaria, la identidad del usuario ya ha sido establecida por el proceso de "autenticación", estos conceptos son comunes y no todos son especificos a Spring Security.

En el nivel de "autenticación" Spring Security soporta muchos modelos de autenticación, muchos de estos modelos de autenticación son proporcionados por terceros o son desarrollados por estandares importantes como el IETF(Internet Engineering tTask Force), adicionalmente, Spring Security proporciona su propio conjunto de caracteristicas de autenticación.

Especificamente, Spring Security actualmente soporta integración de autenticación con todas las siguientes tecnologías:

  1. HTTP BASIC authentication headers (an IEFT RFC-based standard).
  2. HTTP Digest authentication headers (an IEFT RFC-based standard).
  3. HTTP X.509 client certificate exchange (an IEFT RFC-based standard).
  4. LDAP (un enfoque muy comun para necesidades de autenticación multiplataforma, especificamente en entornos extensos).
  5. Form-based authentication (necesario para interfaces de usuario simples).
  6. OpenID authentication.
  7. Computer Associates Siteminder.
  8. JA-SIG Central Authentication Service.
  9. Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker.
  10. Automatic "remember-me" authentication.
  11. Anonymous authentication.
  12. Run-as authentication.
  13. Java Authentication and Authorization Service (JAAS)
  14. Container integration with JBoss, Jetty, Resin and Tomcat (tambien podemos usar autenticación gestionada por el contenedor)
  15. Java Open Source Single Sign On (JOSSO) *
  16. OpenNMS Network Management Platform *
  17. AppFuse *
  18. AndroMDA *
  19. Mule ESB *
  20. Direct Web Request (DWR) *
  21. Grails *
  22. Tapestry *
  23. JTrac *
  24. Jasypt *
  25. Roller *
  26. Elastic Plath *
  27. Atlassian Crowd *
  28. Nuestros propios sistemas de autenticación.
(* Indica proporcionado por un tercero)


Muchos proveedores de software independientes adoptan Spring Security porque tiene modelos flexibles de autenticación, haciendolo les permite rápidamente integrar sus soluciones con cualquier necesidad de su cliente sin emprender un conjunto de ingenierias o requerir al cliente cambiar su entorno.

Si ninguno de los mecanismos de autenticación satisface tus necesidades, Spring Security es una plataforma abierta y además es bastante simple como para poder escribir nuestros propios mecanismos de autenticación, muchos usuarios corporativos de Spring Security necesitan integrarse con sistemas legados que no siguen ningún estandar particular de seguridad por lo que Spring Security se integra fácilmente a estos sistemas

A veces el simple proceso de autenticación no es suficiente. A veces necesitamos tambien diferenciar la seguridad basada en como el usuario interactua con nuestra aplicación, por ejemplo, podríamos querer asegurarnos que las solicitudes solo lleguen a través de https, esto para proteger passwords de terceros que puedan interceptarlo. O tambien podriamos querer asegurarnos que una persona es quien está realizando las solicitudes y no un "robot" o otro proceso automatizado.

Esto es especialmente util para proteger el proceso de recuperación de passwords de ataques de fuerza bruta, o simplemente para hacer más difícil a las personas duplicar el contenido clave de nuestra aplicación. Para ayudar a realizar estas metas, Spring Security soporta completamente "canales de seguridad" automáticos integrandose con JCaptcha para detección de usuarios humanos.

Independientemente de como la autenticación fué realizada, Spring Security proporciona un cunjunto amplio de capacidades de autorización. Existen tres áreas principales de interés respecto a la autorización, que son; autorización basado en solicitudes web, autorización basada en que métodos pueden ser invocados y autorización de acceso a instancias de objetos que pertenecen a un dominio individual, para entender mejor las diferencias considera las capacidades de autorización encontradas en la especificación Servlet del patrón de Seguridad Web, seguridad EJB gestionada por el contenedor y la seguridad de los sistemas de archivos respectivamente.


2 comentarios:

  1. Me gusto mucho su articulo, justamente ando en pleno desarrollo usando spring security 3 y es bastante interesante. Saludos cordiales

    ResponderBorrar
  2. Excelente intro para entender bien qué abarca Spring Security, es lo que buscaba, ya que hasta ahora encontraba todo netamente técnico... Muchas gracias y saludos!
    Hernán Funes

    ResponderBorrar

Es bueno comunicarnos, comenta!!.