Seguridad
06/12/2011
Seguridad en ataStore
Seguridad
En nuestra aplicación un buen número de páginas no serán públicas, es decir, que no estarán disponibles para usuarios no confiables.
Tenemos dos conceptos básicos:
- Autenticación: proceso por el cual una persona se identifica en el sistema. El método más sencillo es el basado en usuario y contraseña.
- Autorización: proceso por el cual se concede a un usuario identificado permiso para acceder a un recurso o realizar una acción.
En aplicaciones Java, podemos garantizar la autorización mediante seguridad declarativa o programática.
En la seguridad programática, somos nosotros en nuestro código los encargados de comprobar si un usuario tiene permiso para acceder a un recurso.
En la seguridad declarativa, definimos una serie de reglas según las cuales los usuarios pueden acceder a determinados recursos.
Los sistemas de autorización declarativa permiten tener el conjunto de reglas juntas y no aumentar la complejidad de nuestro código, por lo que son preferibles.
JAAS
El sistema estándar de Java para seguridad se llama JAAS. En aplicaciones web, nos proporciona seguridad declarativa (en web.xml) y métodos para implementar la segurida programática.
Spring-security
Es el módulo de Spring encargado de gestionar la seguridad. Partiendo de la idea de JAAS, es más flexible y potente, permitiendo, por ejemplo:
- Configuración sencilla de varios servicios de autenticación (BD, LDAP, OpenID, etc.).
-
Seguridad declarativa a través de URLs y roles.
Por ejemplo, la siguiente configuración establece que para acceder a URLs que empiezan por admin hay que tener el rol de administrador:
- Sistemas de listas de control de acceso (ACL) para permisos más detallados.
Configuración de Spring-security
En primer lugar añadimos en el web.xml un filtro que se encargará de controlar el acceso a la aplicación.
En segundo lugar, configuramos Spring-security. Esto lo hemos hecho en el archivo WEB-INF/spring/security.xml.
Hemos montado un sistema básico de acceso mediante usuario y contraseña:
- El usuario y contraseña se obtienen de la tabla users (ver src/main/resources/schema.sql).
- La contraseña se encuentra encriptada con el algoritmo SHA1.
- Los roles se obtienen de la tabla authorities (ver src/main/resources/schema.sql).
Filtro de Spring-security
Para permitir que un usuario con el mismo email esté registrado en dos tiendas distintas, concatenamos el id de la tienda al nombre de usuario.
pepe@atotarreu.com@253
Para que en la autenticación se use el nombre de usuario correcto usamos un filtro de Spring-security com.atotarreu.util.StoreAuthenticationFilter que concatena el id en el momento de envío del formulario de login.