domingo, 3 de enero de 2010

Google AppEngine: Protegiendo el contenido web.

En un post anterior vimos como utilizar las cuentas de google para hacer login y logout en app engine. Ahora veremos una de las opciones para proteger contenido en nuestra aplicación, mediante la definición de reglas declarativas en el archivo web.xml. Para una referencia completa de las cosas que podemos hacer en el web.xml para app engine, ver el siguiente enlace.

AppEngine provee una forma estándar (llamando a estándar a compatible con JAAS) para proteger recursos declarativamente. Por ejemplo en la aplicación del appspot de este sitio se definió:

    <security-constraint>
<web-resource-collection>
<url-pattern>/seguro/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>

Diciendo que lo que hay dentro de la carpeta "/seguro/" puede ser sólamente accedido por el rol "*".
AppEngine nos provee 2 roles distintos para nuestra aplicación:
  • El rol de cuenta de google: "*"
  • El rol de administrador: "admin"
El primero se aplica a cualquier persona logueada con su cuenta de google, y el segundo sólo a aquellas cuentas de google que definimos en la configuración de la aplicación como "admin".

Esta definición resulta suficiente para proteger cualquier contenido en nuestra aplicación, sin embargo cuando trabajamos con GWT, las consideraciones son un poco distintas, ya que debemos por un lado proveer una lógica que oculte o deshabilite opciones que no son accesibles y, debido a que se trata de código en el cliente, debemos proteger las llamadas remotas.

El escenario ideal para proteger las llamadas remotas es el de los servlets con programación orientada a aspectos o AOP y posiblemente anotaciones para asegurar métodos en forma declarativa. En un post futuro investigaremos estas posibilidades y utilizaremos filtros, algo realmente poderoso, para armar la seguridad de la forma menos trabajosa.

Saludos!

No hay comentarios.:

Publicar un comentario