Para poder comprender como funciona el MVC es necesario saber cuál es el ciclo de vida de una aplicación creada con esta tecnología; desde que se recibe la solicitud HTTP, hasta que se envía de regreso la respuesta HTTP.
La idea es conocer el proceso de ejecución en las diferentes etapas, con mucho mas detalle que si habláramos del nivel más alto de abstracción, así podremos identificar donde podremos intervenir para mejorar la seguridad de nuestras aplicaciones…
Abstracción de primer nivel.
En su más alto nivel de abstracción una aplicación desarrollada usando ASP.NET MVC recibe la solicitud HTTP, la atiende por medio por medio del modulo de RUTEO, este se encarga de crear una instancia de la clase MvcHandler que a su vez se encargara de crear una instancia del Controller especifico para atender esa solicitud.
Una vez que el controlador se ha creado, este ejecutara el método que se ha invocado. Este método suele recibir información que después de ser procesada, genera un paquete de datos para responder, mismos que son formateados y enviados de regreso al usuario como una respuesta HTTP que contiene código HTML.
Veámoslo con más detalle.
Ya hemos visto a grandes rasgos cual es el ciclo de vida de una aplicación MVC , desde la solicitud HTTP hasta que se envía el resultado; ahora vamos a ver cada etapa por separado y con más detalles. Este conocimiento nos permitirá escribir código para intervenir en cualquiera de estas etapas y alterar la forma como se comporta una aplicación MVC.
- Ruteo: El primer paso de una aplicación ASP.NET MVC consiste en identificar la ruta más apropiada para responder; esto lo hace usando una tabla de rutas. La tabla se crea cuando se ejecuta la aplicación por primera vez, cada aplicación solo contendrá una tala de rutas. Relación con seguridad: Podemos crear nuestras rutas personalizadas, para atender escenarios particulares. Podemos crear nuestro propio mecanismo de ruteo.
- Manejador: Cuando el manejador de las rutas encuentra una ruta que corresponde con el patrón, se crea una instancia del manejador de Http que por default es: System.Web.MvcHandler. Relación con seguridad: Podemos modificar los encabezados que crea el servidor, para ocultar información como la versión del IIS o del Framework. Asi mismo podemos crear nuestro propio manejador.
- ControllerFactory: El manejador del MVC inicia la creación del Controller que atenderá la solicitud a partir de una instancia del IControllerFactory. Cuando el controller se ha creado este invocara al método que se ha solicitado pasándole los parámetros al ModelBinder. Relación con seguridad: Podemos crear nuestro propio Controller Factory y añadir comportamiento personalizado, como podría ser: verificar si la solicitud HTTP ha sido autentificada o no.
- Model Binder: El model Binder obtiene los datos de la solicitud entrante de HTTP y realiza la conversión y la validación de los datos. Relación con seguridad: Podemos crear nuestra propia versión del ModelBinder para realizar procesos personalizados, como podría ser administrar un carrito de compras y asegurarnos que sea el que corresponde a la sesión y que no ha sido manipulado del lado del cliente.
- Filtros: La seguridad se aplica mediante dos filtros: Autenticación (MVC5) y Autorización. Primero se lleva a cabo la autenticación del usuario, de inmediato se aplicaran los filtros de autorización para controlar la ejecución de un Método o acción. Relación con seguridad: Los filtros nos permiten controlar el acceso basándonos en el perfil del usuario que está solicitando la ejecución, al crear filtros de seguridad personalizados, podemos controlar la ejecución de acciones basados en esquemas complejos.
- Acciones: Cuando el usuario ha obtenido los privilegios necesarios para ejecutar una acción el método recibe los datos que han sido procesados por el Modelbinder, por lo general los procesa con la ayuda de Servicios y Clases de persistencia, tras lo cual prepara un resultado. Relación con seguridad: Cada acción puede ser configurada para que el acceso se restrinja a un usuario de manera explícita o incluso a un perfil o grupo de usuarios.
Resultado.
La acción suele generar un resultado para ser regresado, este resultado puede ser de varios tipos:
- ViewResult.
- PartialViewResult.
- ContentResult.
- JsonResult.
- FileResult.
- EmptyResult
- RedirectResult.
- RedirectToRouteResult.
Estos resultados pueden ser agrupados de dos formas: Visuales y no Visuales. Los visuales son aquellos que pueden ser convertidos en una página HTML. Los que solo son datos en formato de texto, binario o formatos Json se consideran no visuales.
Vista
Los resultados visuales son manejados por un ViewEngine, que se encarga de convertir los datos; ASP.NET MVC nos ofrece dos ViewEngines: Razor y WebForms. En este punto los Engines se apoyan de Helpers que nos permiten simplificar el proceso de formateo de la información. Como ya se habrán imaginado, en este punto también podemos crear nuestro Engine personalizado para tomar el control.
Comentario final.
Independientemente de las posibilidades relacionadas con el control de la seguridad en todos y cada uno de los niveles, creo que esta plataforma es la más versátil y poderosa que ha creado Microsoft para la comunidad de programadores.
Espero que este breve articulo les haya ayudado a comprender las etapas en la vida de una aplicación desarrollada con MVC.
Suerte.
No hay comentarios:
Publicar un comentario