Ayer tuvimos una interesante mesa redonda, done expusimos nuestras experiencias en el desarrollo y planificación de aplicaciones web siguiendo la filosofía SPA «Single Page Application».
En este debate expuse una duda sobre la seguridad de este tipo de aplicaciones, porque creo que no está bien resuelta. Pero por el comentario de Alfredo y de su compañero de Plain Concepts creo que no quedo del todo claro mi punto de vista.
Primero de todo quiero aclarar que no dije o eso espero :), que la seguridad de una aplicación web dependa de que si un usuario pueda o no ver tu código. Por eso me gustaría hacer un pequeño resume a ver si de esa manera puedo exponer mejor mi duda y podamos debatir sobre el tema.
Seguridad de los servicios y datos
Esta parte bajo mi punto de vista está bien resuelta con la utilización de oauth y los tokens tanto para la autentificación como para la autorización al acceso de recursos.
Seguridad de la interfaz de usuario
Esta parte es la que me chirria si nos basamos en la filosofía SPA, tener las vistas completamente en el cliente y gestionar todo desde JavaScript.
La parte de autentificación no me preocupa porque podemos utilizar el mismo sistema que para los servicios. Pero si me preocupa la autorización de la partes privadas de la interfaz. Cualquier aplicación profesional te pedirán que dependiendo del rol del usuario pueda acceder a acciones del menú o a vistas que otro usuario no tendría que tener acceso.
Por la misma naturaleza de JavaScript si gestionamos esto desde el cliente personalmente me parece poco seguro «es fácilmente accesible y modificable» y vuelvo a repetir que mis servicios si que están protegidos.
Mi solución
La opción que he utilizado para evitar este problema desde angularJS , es al definir el enrutamiento de los controladores y las vista, utilizar RequireJs para cargarlas vistas desde el servidor de forma perezosa. De esta manera puedo utilizar la seguridad de ASP.NET y la localización de los recursos y solo cargar en el cliente el HTML validado desde el servidor sin perder la funcionalidad SPA.
Con este mezcla de cliente-servidor evito dar una responsabilidad innecesaria al cliente y evitar futuros problemas de seguridad.
Debate
Ahora me gustaría saber vuestra opinión sobre el tema y si habéis encontrado otra alternativa para solucionar este problema. Como he comentado antes para mi no se puede resolver de una forma natural con una aplicación SPA gestionando las vistas completamente desde el cliente.
Espero vuestros comentarios 😉
https://plus.google.com/u/0/events/cufio59kfjdrd74dp5iha9lr7l0?authkey=CNC-4OOugMmNtAE