RESUMEN EJECUTIVO SOBRE EL CLIENTE
Agencia pública empresarial española, adscrita a la Consejería de Fomento, Infraestructuras y Ordenación del Territorio.
La empresa contrató a Chakray Consulting para que pudiera acompañarlos en su camino de implantación de una arquitectura de interoperabilidad y de SSO, y así conseguir una nueva arquitectura para sus aplicaciones corporativas.
PROYECTO LLEVADO A CABO
El cliente necesitaba poder ofrecer al ciudadano distintos servicios a través de aplicaciones web. Hasta el momento, el componente de seguridad de las aplicaciones desarrolladas por la Unidad de Informática (que proporciona servicios para la identificación de usuarios y control de permisos) se basaba en un desarrollo propio que, aunque cubría las necesidades básicas de autenticación y autorización para uso interno en la empresa, no daba garantías suficientes para poder ofrecer dichas aplicaciones fuera de la intranet con la seguridad que requieren en cuanto a autenticación y control de acceso se refiere.
Identificada esta carencia, y realizado un análisis previo, se encontró que estas necesidades estarían cubiertas sobradamente con un componente software ya existente en el mercado, denominada bajo el concepto de “Gestión de Identidad y Seguridad” de la empresa WSO2 (WSO2 Identity Server), además de proporcionar otra funcionalidad complementaria y también necesaria, consistente en controlar el acceso y la seguridad también en los servicios que proporcionan datos a las distintas aplicaciones (WSO2 Enterprise Integrator).
Los objetivos a cumplir con el cliente eran:
♦ Integrar este sistema en la arquitectura de las aplicaciones desarrolladas, garantizando los niveles de seguridad necesarios para que se puedan ofrecer aplicaciones fuera de la red interna del cliente.
♦ Dotar al equipo de Informática del cliente de conocimientos para poder administrar, gestionar e integrar este nuevo sistema.
CASO DE ÉXITO
AGENCIA PÚBLICA
EMPRESARIAL ESPAÑOLA
La implantación e integración debía cumplir los siguientes requisitos impuestos por el cliente:
♦ Autenticación
♦ Debe ofrecer la posibilidad de autenticarse con usuario/clave basado en el actual Directorio Activo de la empresa, utilizando para ello protocolo LDAP y LDAP Seguro o LDAPS.
♦ En algunos grupos de aplicaciones, una vez que el usuario ya se haya autenticado en la aplicación no tendrá que autenticarse otra vez. (se podrá especificar un tiempo máximo desde que el usuario no ha entrado en ninguna aplicación para que tenga que volver a autenticarse nuevamente).
♦ En algunos grupos de aplicaciones (por ejemplo las que se usan internamente en la empresa), tiene que poder permitirse el Single Sign-On, es decir, que una vez autenticado en una aplicación, si accede a otra aplicación que utilice este Sistema de Identidad y Seguridad, no tenga que autenticarse otra vez.
♦ Debe ofrecer unos niveles de seguridad altos (por ejemplo autenticación basada en tokens, https, directrices a seguir en los desarrollos…) que garanticen que un usuario no pueda saltarse dicho control y realizar acciones que no estén permitidas en el sistema.
♦ Autorización
♦ Se podrán definir qué pantallas o acciones puede realizar un usuario sobre la aplicación según los siguientes datos del usuario:
♦ Usuario
♦ Empresa
♦ Unidad organizativa a la que pertenece el usuario en la empresa, que debe ser jerárquica, es decir, qué unidades organizativas padres incluyen a las hijas en cuanto a permisos se refiere.
♦ Roles (escritura, lectura, administrador, redactor…), definibles por cada aplicación
♦ Ámbito (a nivel geográfico: sevilla, cádiz… u otros ámbitos que sirvan para delimitar qué datos se visualizan, p.e.
oficina, dirección… )
♦ Una vez que un usuario tenga permisos para realizar cierta acción, se debe poder controlar la visibilidad de los datos que se muestran según los datos del usuario especificados en anterior punto (por ejemplo, si un usuario tiene permisos de lectura sobre una pantalla de listado de empleados, sólo se les mostraría los de su unidad organizativa).
♦ Las aplicaciones pueden tener partes públicas, que no necesiten de autenticación o autorización en el sistema, y otras privadas en las cuales se les solicite la autenticación en caso de que no estén ya identificados en el sistema.
♦ El Sistema de Identidad y Seguridad deberá permitir que un usuario con dos perfiles distintos (perfil definido como conjunto de determinados permisos) pueda entrar en la aplicación aplicando sólo uno de los perfiles (como por ejemplo para entrar como administrador total de la aplicación o sólo como usuario).
♦ Enterprise Service Bus (ESB)
♦ Se debe poder añadir autenticación en servicios ya existentes (sin desarrollo adicional).
♦ Se debe poder crear nuevos servicios añadiendo funcionalidad sobre la base de servicios ya existentes de manera fácil (sin desarrollo adicional), o realizando una composición de servicios ya existente, sin necesidad de desarrollar con código ese nuevo servicio.
♦ Se deben generar sin desarrollo adicional servicios restful CRUD (create, Read, Update, Delete) de datos según los modelos existentes en base de datos.
♦ Se deben de poder ofrecer servicios restful o soap ya desarrollados en Java.
DESCRIPCIÓN FUNCIONAL DE LA APLICACIÓN
La utilidad de esta aplicación es la de servir de consulta de datos de empleados de la empresa, bien para llamar por teléfono, enviar un email, consultar algún dato, etc.
La aplicación cuenta con las siguientes pantallas / funcionalidades:
Empleados
En dicho listado, como en todos los de la aplicación el usuario puede seleccionar una fila para ver el detalle o pulsar sobre alguna acción situada al final de cada fila. Se sitúan primero las acciones de uso más habitual, como añadir a favorito o enviar un correo electrónico, y ya en otras acciones se enumeran todas las acciones posibles:
Tanto las filas como las acciones que se muestran dependen de los permisos del usuario. El usuario se toma automáticamente del usuario de Windows. Deben existir y controlarse los permisos de usuarios de manera que:
♦ A nivel de datos: Se tenga acceso (y por lo tanto se muestran) a:
♦ Todos los empleados
♦ Sólo los empleados de su centro de trabajo (incluyendo los centros de trabajos contenidos en este por jerarquía, ya que los centros tienen una relación jerárquica)
♦ A nivel de acciones:
♦ Sólo consulta: permite realizar todas las acciones del empleado menos editarlo
♦ Escritura: permite además editar el empleado
El listado puede ordenarse pulsando sobre la cabecera de la columna correspondiente o en el menú de la barra de utilidades (cabecera):
También se puede buscar en este listado de manera simple introduciendo una sola palabra en el cajón de búsqueda (y esto buscará esta palabra en todos los campos de empleados):
O pulsar sobre el menú de búsqueda avanzada y hacer la búsqueda con más detalles:
Al ver el detalle de un empleado se abre un diálogo con los datos del empleado y también se pueden realizar acciones sobre éste. El control de permisos es el mismo que en el listado y además puede solicitarse una corrección de algún dato.
Con el de escritura puede además borrar, editar y el usuario de consulta puede imprimir y añadirlo a su favorito.
Centros de trabajo (listado y detalle)
Es la misma funcionalidad descrita anteriormente, pero para los datos del centro de trabajo. Por cada centro de trabajo hay una acción que lleva a un listado de empleados de ese centro.
Autenticación
Como se ha comentado antes, cuando un usuario accede a la aplicación, la aplicación se autentica por defecto en el sistema de seguridad de WSO2. Sin embargo, el usuario puede elegir desconectarse y acceder como anónimo a la aplicación (si se permite) o cambiar de usuario, eligiendo en la cabecera del menú de navegación, junto al nombre del usuario. Podrá seleccionar si se quiere usar esta selección y las credenciales para siguientes usos de la aplicación, para que no se le solicite autenticación otra vez. Si elige usuario y clave se le solicitan estos datos en nuevo diálogo, tal como muestran las capturas de pantalla:
DETALLE DE LA ENTREGA
♦ App en vue.js de ejemplo y dockers de servidores/servicios WSO2 configurados y funcionando con los nuevos requisitos, es decir, implantación de este nuevo Sistema de Identidad y Seguridad (con los componentes necesarios) y la integración en la aplicación de ejemplo, tanto en el acceso a la parte interactiva de la aplicación (frontend) como en los servicios que proporcionan datos a dichas aplicaciones (backend). Dicha implantación e integración debe cumplir los siguientes requisitos:
♦ Para los nuevos entregables o cambio de lo actual todo el código deberá estar versionado en los repositorios gitlab del cliente habilitados para ello.
♦ Instalación (o actualización de los existentes) en un docker-compose y sus correspondientes dockers de las últimas versiones estables de los productos necesarios.
♦ La app de ejemplo debe ser funcional para ver cómo llamar a los servicios web, tal como está definido en el documento, no se pide ni se requiere una interfaz elaborada, puesto que el cliente ya tiene la suya propia.
♦ Autenticación, deberán estar tanto el Dockerfile, el docker-compose y las instrucciones para arrancar el docker.
♦ El docker-compose se facilitará desde el cliente para facilitar la posterior integración en la infraestructura.
♦ Los dockers deberían de ser independientes de cualquier configuración que cambie entre entornos (p.e. persistencia, conexión a bbdd, conexión a directorio activo, conf de autenticación, certificado digital, logs...)
♦ Autorización (control de acceso)::
♦ Una vez autenticado, el sistema debe controlar el control de acceso a los servicios restful según lo definido en el esquema de seguridad.
♦ Una vez autenticado y controlado el acceso, los servicios restful (y por lo tanto la app de ejemplo) deben devolver o permitir la modificación de datos sólo en el ámbito de datos definidos en el esquema de seguridad.
♦ Las aplicaciones pueden tener partes públicas, que no necesiten de autenticación o autorización en el sistema, y otras privadas en las cuales se les solicite la autenticación en caso de que no estén ya identificados en el sistema.
♦ El Sistema de Identidad y Seguridad deberá permitir que un usuario con dos perfiles distintos (perfil definido como conjunto de determinados permisos) pueda entrar en la aplicación aplicando sólo uno de los perfiles (como por ejemplo para entrar como administrador total de la aplicación o sólo como usuario)
♦ Documentación
♦ Instrucciones suficientes como para poder arrancar y probar en local lo solicitado y definición de los parámetros configurables y cómo cambiarlos.
♦ Documentación necesaria para poder inspeccionar y entender el código de la app de ejemplo.
♦ Instrucciones para poder arrancar el entorno de desarrollo (aparte del docker) de esta app para poder inspeccionar el código (p.e. instrucciones npm...)
♦ Llamada a servicios de WSO2 Enterprise Integrator.
♦ Explicación de cómo se ha implementado en código partes relevantes, al menos:
‣ Autenticación
‣ Llamada a servicios de WSO2
‣ Control de permisos de usuario logado (función, ámbito...) según varios casos en lo definido en Documentos de definición de servicios con nuevo esquema de autenticación y autorización
LA SOLUCIÓN
Para dar solución a los trabajos propuestos para el cliente, Chakray realizó el siguiente Docker-Compose con los siguientes componentes:
Las versiones e imágenes que se utilizaron dentro del Docker-Compose fueron los siguientes:
♦ Docker 2.4
♦ Oracle XE 11g
♦ Mysql 5.7.26
♦ WSO2 Identity Server 5.7
♦ WSO2 Enterprise Integrator 6.4
♦ Apache httpd:2.4.41-alpine
Diagrama de Arquitectura
A continuación se indica el esquema de la solución final implementada:
CONCLUSIONES Y RESULTADOS
El proyecto no estuvo exento de desafíos, con múltiples interacciones entre el Cliente y Chakray para conseguir un avance coordinado y resolución de cualquier dificultad que fuera apareciendo por el camino. Chakray pudo ayudar a mantener los
problemas al mínimo, siendo capaz de planificar y ejecutar los diseños y desarrollos de tal manera que todas las partes trabajaron y fueron eficaces.
Al final el proyecto se entregó con la máxima calidad, esperada por el Cliente, disponiendo en la actualidad de una plataforma WSO2 dockerizada, 100% operativa y con la implementación de desarrollos, válidos para el paso a producción.