Tengo una API que estoy exponiendo a través de REST y estoy deliberando sobre dónde colocar las restricciones de las autoridades.
He leído que hay una mejor práctica para asegurar la capa de servicio, ya que es la que está haciendo el trabajo y no sabes a dónde se va a llamar, pero no estoy seguro de cuál es la mejor práctica con respecto a la capa WS.
Un pensamiento que tengo es que necesito tener un modelo de autorización de grano muy fino en la capa de servicio y un modelo de autorización de grano grueso en la capa de WS para minimizar el rompimiento del principio DRY por un lado, pero aún tener algunos noción de defensa en profundidad.¿Seguridad de resorte que asegura la capa de servicio, la capa de servicio web o ambas?
Ejemplo:
Para el recurso Users
hay un UserWS
y una UserService
. Los administradores pueden crear/actualizar/eliminar usuarios y los usuarios pueden leer sobre otros usuarios.
Suponiendo que UserWS
está obligado a %root%/users
Definiré un intercept-url
para esa url con la autorización ROLE_USER
que dice que debe ser un usuario para llegar allí, pero la capa de servicio especificará las autoridades específicas para los métodos pertinentes.
Otras opciones son:
Coloque los mismos requisitos de autorización, tanto en el servicio y la WS-
Pro-Vas a filtrar tan pronto como posibles intrusos (y ahorrar, por ejemplo, la la conversión de los parámetros si está utilizando MVC primavera)
Con- Duplicación de configuración es un problema de mantenimiento y es propenso a errores tema => seguridadColoque el authorizati sobre requisitos sólo en la WS
Pro- filtro tan pronto como sea posible si comming por el LR
confirma la capa de servicio puede ser utilizado de diferentes contextosPlate los requisitos de autorización sólo en el servicio-
pro- hay duplicación
Overhead Con- de permitir "rodeos" solicitud inepto para llegar a la capa de servicio
realmente apreciaría cualquier comentario acerca de las opciones
gracias por su respuesta, pero como he dicho, si solo tengo las MISMAS autoridades en ambos, entonces es una duplicación y es propenso a errores (por lo tanto, responsabilidad de seguridad). Suponiendo que anote la capa de servicio, ¿qué crees que debería colocar en el WS y por qué? Gracias – Ittai
en mi humilde opinión solo necesita tener un solo servicio que tenga la lógica y tenga un delegado de UI para ese servicio y un delegado de WS. De esta manera solo necesita anotar el servicio concreto. En general, si no desea duplicación, debe asegurar el componente que contiene la lógica real. – Simeon