¿Dónde realizar la autorización en una aplicación web?

0

La mayoría de las aplicaciones web realizan comprobaciones de autorización en la capa del controlador. Esto es básicamente correcto, pero las aplicaciones complejas tienden a tener controles repetitivos. Por ejemplo, puede haber una decena de acciones de controlador que operan en una Orden, y cada acción debe verificar que el Usuario actual esté autorizado para acceder a esa Orden.

Algunas aplicaciones se ocupan de esto al tener funciones de ayuda en Orden, por ejemplo, Order.isUserAuthz () y esto reduce la hinchazón del código. Sin embargo, todavía existe el riesgo de que un método de controlador particular se olvide de llamar a esa función. Desde mi experiencia con las pruebas de lápiz, esto es bastante común en aplicaciones complejas.

En cambio, ¿qué tal si la capa del modelo realiza la verificación de autorización? Por lo tanto, cuando cargue un pedido, solo se cargará si el usuario actual está autorizado. Debido a que esto se realiza mediante la capa del modelo, no hay riesgo de que la capa del controlador olvide realizar una llamada. En última instancia, lo que está haciendo es reducir la cantidad de código crítico para la seguridad, lo que reduce el riesgo de que un error de codificación cause una vulnerabilidad.

Esto me parece una buena idea, pero no es una práctica común. ¿Tiene alguna idea sobre los riesgos que podría plantear, o dificultades de implementación?

    
pregunta paj28 21.10.2013 - 11:47
fuente

1 respuesta

1

Según la forma en que ha formulado la pregunta, supongo que se refiere a una aplicación .net MVC.

Personalmente veo MVC como un patrón de presentación. Tiendo a mis modelos bastante DTOs. Mi controlador solo es responsable de pasar los datos del usuario a mi capa de servicio y de asignar la respuesta al DTO.

La capa de servicio contendría toda la lógica de autenticación y, por lo tanto, se compartiría entre muchos controladores diferentes

Mis controladores también son responsables de traducir las excepciones de seguridad internas a los códigos de estado http apropiados.

En realidad, los controladores deben estar bastante vacíos de lógica por la razón exacta que describe.

    
respondido por el Ross Dargan 21.10.2013 - 12:17
fuente

Lea otras preguntas en las etiquetas