3. Diseño de la aplicación
4.6. PDP (Policy Decision Point)
4.6.4. Estructura
El PDP está organizado en distintas partes cada una de ellas es un conjunto de clases agrupadas en paquetes Java (packages). Las clases agrupadas en un mismo paquete comparten un enfoque común o están destinadas a un conjunto de funcionalidades similares. Así tenemos paquetes para la interfaz de comunicación, paquetes para los algoritmos de lectura de las políticas, también para los datos de usuario e incluso para algoritmos de comparación. En definitiva cada grupo aporta una pequeña resolución del problema.
En la siguiente figura se muestran todos los paquetes que componen el PDP, seguidamente se comentan qué funciones o tareas implementan o realizan.
Figura 20. Paquetes PDP
El paquete “policies” es la raíz del sistema, el nombre de “políticas” está dado por el carácter del PDP. En este paquete figuran los criterios de decisión de qué clase debe resolver qué problema. Llegada una nueva consulta está es gestionada por las clases contenidas en los otros paquetes. Del paquete “policies” cuelgan los demás paquetes; el paquete “general” contiene todo el conjunto de clases genéricas y que en su mayoría son utilizadas en otros paquetes, entre ellas destacan las clases que implementan los
algoritmos de lectura de las políticas, las interfaces de comunicación con LDAP y otros. En el paquete “data” se almacenan los datos de las consultas, tales datos son utilizados para el análisis de las condiciones de las políticas.
Los paquetes “managerPolicies”, “security” y “userPolicies” responden a los servicios de “gestor”, “seguridad” y “usuario” comentados anteriormente. Precisamente en el criterio de “decisión” de “qué clase da respuesta a qué problema” deriva en el uso de una de las clases contenidas en estos paquetes.
general policies security managerPolicies userPolicies data accessControl servicios servicios servicios
“managerPolicies”, “security” y “userPolicies” albergan clases que utilizaran métodos de los paquetes “general” y “general.data”.
En el paquete “security” existe “accessControl”, se utiliza agrupadamente un paquete distinto como previsión de nuevas implementaciones en el futuro (nuevas clases) y para no mezclar clases las unas con las otras se diferenciarían cada tipo por el paquete al que pertenecen.
Aquí únicamente destacaremos algunas clases del paquete “general”, éstas son “Interface”, “LDAPDirContext”, “CommonLogicalConditions”,
“CommonLogicalActions”, “PDPGeneralPolicies”, “PEPGeneralPolicies” y “Check”.
La clase “Interface” alberga la información necesaria para comunicarse con los demás recursos de la red, principalmente el servidor LDAP, no obstante también alberga datos de conexión para la comunicación con el PEP, estando este según la tarea distribuido en la interfaz “web” (JSP) y “scripts” para la comunicación con los servidores de contenidos a través de “kerberos”.
Esta clase “Interface” es principalmente la encargada de mantener el “mapeo” de los atributos “LDAP” a métodos que implementan la evaluación de las condiciones y a
métodos que comunican las acciones al PEP. Así entonces tenemos que de ser necesario ampliar el vocabulario “LDAP” de nuestro PDP, para dar cabida a nuevos valores de variables, deberíamos añadir los “mapeos” en esta clase. Los “mapeos” son
implementados por cadenas de caracteres o “strings” según la nomenclatura Java. Nombres de usuario y contraseñas también se hayan en esta clase, por ello desde el punto de vista de seguridad de los datos, esta clase es la más critica.
La clase “LDAPDirContext” implementa la comunicación con LDAP, bastará
únicamente recurrir a sus métodos para extraer un flujo de comunicación con el servidor. Esta clase se trata realmente de un cliente LDAP cuyos métodos responden al estándar del protocolo más otros que nos ayudan en la resolución de las consultas.
Las clases “CommonLogicalConditions” y “CommonLogicalActions” son,
respectivamente, el algoritmo para la correcta lectura de las condiciones y acciones de las reglas que componen las políticas. Son algoritmos totalmente genéricos y se utilizan continuamente en las clases de los paquete “managerPolicies”, “security” y “userPolicies”.
Si bien las anteriores clases permiten descender por el árbol LDAP desde su raíz hasta sus valores de las variables, son las clases “PDPGeneralPolicies” y
“PEPGeneralPolcies” las que implementan las condiciones y el “envío” de las acciones respectivamente. Estas clases utilizan la clase “Interface” para el “mapeo”, desde el valor de una variable a la ejecución de un método. Así tendríamos que al añadir nuevas
políticas, grupos, reglas, condiciones, acciones, etc. cuyos valores de variables no estuvieran en nuestro vocabulario, deberíamos añadir el nuevo “mapeo” en la clase “Interface” y la implementación del método en las clases “PDPGeneralPolicies” y “PEPGeneralPolicies”.
La clase “Check” en realidad se trata de una evolución de la clase “Boolean” de Java, gracias a su uso se permite conocer en todo momento cual es el estado del análisis de las políticas. Así pues, es utilizada para controlar cuando deben ser evaluadas las
En el paquete “data” se almacena toda la información relacionada con las consultas y respuestas. Así tenemos la clase “Service” que almacena a qué servicio hace referencia la consulta. La clase “User” para los datos de usuario y otras más clases como “Session” utilizada en la clase “user” para los datos de sesión y la clase “Host” para la comunicación con las máquinas de nuestra red. Todas estas clases son utilizadas en una clase llamada “Data” y así contener toda la información en un único punto.
Para los paquetes “managerPolicies”, “security” y “userPolicies” existe una clase para cada servicio llamada “Principal”. Estas clases “conocen” la información de a qué política consultar. Con esa información inicializan las clases “Check”, para el estado de el
algoritmo de análisis, la clase “Data” para los datos de la consulta y la respuesta de la política y las clases “CommonLogicalConditions” y “CommonLogicalActions” para la lectura de políticas.