Información del servicio de directorio
Antes de comenzar con las configuraciones dentro del servidor Integration Bus, será necesario establecer y validar la información requerida para acceder al servicio LDAP, en nuestro caso utilizaremos un servicio de Microsoft Active Directorio en Windows 2012, pero se podría utilizar cualquier otro servicio compatible con LDAP V3 como OpenLDAP.
Parámetro | Valor | Observaciones |
Nombre de host | msad12.mgdevelopers.com | Nombre de host donde se encuentra instalado el servicio de Active Directory. |
Puerto | 349 | Puerto de acceso al servicio LDAP, el puerto estándar del protocolo es 349. |
Base DN | OU=Blog, DC=mgdevelopers, DC=com | Nombre distinguido que define la posición del "árbol" del servicio de directorio que se deben tener en cuenta para esta configuración. |
Grupo de usuarios autorizados | CN=Autorizados, OU=Grupos, OU=Blog, DC=mgdevelopers, DC=com | Nombre distinguido (DN) correspondiente al grupo cuyos miembros serán quienes tengan permisos para consumir el Servicio Web. |
Nombre de usuario de acceso al directorio | CN=ldap_binduser, OU=Cuentas de Servicio, OU=Blog, DC=mgdevelopers, DC=com | Nombre distinguido (DN) del usuario que será utilizado por el Integration Bus para establecer la conexión con el servicio de directorio. |
Contraseña | password | Contraseña correspondiente al usuario de acceso al directorio. |
Con el fin de validar la información de acceso definida previamente se considera conveniente realizar una conexión de prueba al servicio de directorio utilizando un cliente LDAP.
Creación de un perfil de seguridad en Integration Bus 9
Antes de habilitar la seguridad en un flujo de mensajes es necesario crear un Perfil de Seguridad ("Security Profile") en el nodo de integración, que en nuestro caso nos permitirá definir un servicio de directorio LDAP como proveedor de seguridad externo con fines de autenticación y autorización.
Creación del perfil de seguridad utilizando Integration Explorer
Seguiremos los siguientes pasos para crear un nuevo perfil de seguridad asociado a un servicio de directorio LDAP:
- Acceder a la propiedades del nodo de integración.
- Seleccionar la sección Security and Policy en el panel izquierdo.
- Presionar el botón Security Profiles.
- Presionar Add para agregar un nuevo perfil
- Seleccionar el nombre del perfil y presionar la techa de función F2 para editar y asignarle un nuevo nombre, en nuestro caso el nombre será MGDevelopersLDAP.
- Completar los campos del nuevo perfil de seguridad de acuerdo a los valores de acceso al servicio de directorio, el valor de los atributos se resumen en la siguiente tabla:
- ldap: es un valor fijo que especifica el protocolo
- s: (valor opcional) se debe especificar si se accederá al servicio de directorio LDAP utilizando SSL
- server: nombre del host o dirección IP del servidor LDAP que se va a contactar.
- port: (valor opcional) se debe especificar el puerto donde atiende el servicio LDAP. El valor predeterminado es 389 (no SSL). Para servidores LDAP con SSL habilitado, normalmente el puerto es 636.
- Presionar Finish en el diálogo de configuración de perfiles de seguridad para el nodo seleccionado.
- Presionar Ok en el diálogo de propiedades del nodo seleccionado.
- Reiniciar el nodo de integración para estar seguros de que se tomarán los cambios realizados en la configuración.
Pantalla 2 - Propiedades del nodo de integración
Pantalla 3 - Perfiles de seguridad
Parámetro | Valor | Observaciones |
Authentication | LDAP | Estableciendo este atributo con el valor LDAP se indica que los requerimientos hacia los flujos de mensajes (o nodos de entrada) que utilicen este perfil deberán ser autenticados utilizando un servicio de directorio LDAP. |
AuthenticationConfig | Este valor se establecerá automáticamente. | |
Mapping | NONE | Este atributo se suele establecer en otro valor cuando es necesario realizar una correlación de información para llamar al proveedor externo de seguridad, por ejemplo cuando se utilizan extensiones de WS-Security como WS-Trust. |
MappingConfig | No aplica | |
Authorization | LDAP | Estableciendo este atributo con el valor LDAP se indica que los usuarios que realizan los requerimientos deben ser parte de un grupo determinado. |
AuthorizationConfig | Este valor se establecerá automáticamente. | |
Propagation | TRUE | Especifica si la propagación de identidades se realizará en los nodos de entrada y de salida. |
Reject Empty Password | TRUE | Especifica si es necesario rechazar la autenticación de un requerimiento con contraseña vacía, sin pasarla al servicio de directorio LDAP. |
Password Value | PLAIN | Especifica cómo se tratan las contraseñas cuando entran dentro del flujo de mensajes. |
LDAP Host | ldap://msad12.mgdevelopers.com:389 | Se debe establecer un valor con el formato
ldap[s]://server[:port], donde:
|
LDAP baseDN | OU=Blog, DC=mgdevelopers, DC=com | Se debe establecer el nombre distinguido (DN) a partir del cual se construirá el nombre de usuario o se realizará la búsqueda del usuarios en el servicio de directorio. |
LDAP uid attr | sAMAccountName | Permite definir el atributo del esquema LDAP con el que se debe correlacionar el nombre de usuario. |
LDAP search scope | [En blanco - Toma valor por omisión] | Especifica si se debe realizar una búsqueda base o de subárbol. Si se define base, la autenticación es más rápida porque el nombre distinguido (DN) del usuario se construirá a partir de los valores atr_uid, el nombre de usuario y baseDN. Si se selecciona sub, se debe realizar una búsqueda para poder resolver el nombre distinguido (DN) de los usuarios. El valor predeterminado es sub. |
LDAP group baseDN | CN=Autorizados, OU=Grupos, OU=Blog, DC=mgdevelopers, DC=com | Se debe establecer con el nombre distinguido (DN) del grupo del que los usuarios deben ser miembros para que se los considere autorizados. |
LDAP group member attr | [En blanco - Toma valor por omisión] | El atributo del grupo utilizado para filtrar la búsqueda. De manera predeterminada se buscan los miembros en los atributos member y uniquemember. |
Pantalla 4 - Nuevo perfil de seguridad MGDevelopersLDAP
Verificar los valores del perfil de seguridad creado
Luego de creado el perfil de seguridad ejecutaremos el comando mqsireportproperties para verificar los valores ingresados en la configuración:
mqsireportproperties <integration_node> -c SecurityProfiles -o <security_profile> -r
Donde integration_node debe ser el nombre del nodo de integración utilizado (IB9NODE) y security_profile será el nombre del perfil de seguridad creado anteriormente (MGDevelopersLDAP), el resultado de la ejecución del comando debería ser similar al siguiente:
[root@localhost bin]# mqsireportproperties IB9NODE -c SecurityProfiles -o MGDevelopersLDAP -r SecurityProfiles MGDevelopersLDAP authentication='LDAP' authenticationConfig='ldap://msad12.mgdevelopers.com:389/OU=Blog,DC=mgdevelopers,DC=com?sAMAccountName' authorization='LDAP' authorizationConfig='ldap://msad12.mgdevelopers.com:389/CN=Autorizados,OU=Grupos,OU=Blog,DC=mgdevelopers,DC=com' idToPropagateToTransport='Message ID' keyStore='Reserved for future use' mapping='NONE' mappingConfig='' passwordValue='PLAIN' propagation='TRUE' rejectBlankpassword='TRUE' transportPropagationConfig='' trustStore='Reserved for future use' BIP8071I: Successful command completion.
Configuración de la identidad utilizada para acceder al servicio de directorio LDAP
En general los servicios de directorio no permiten ser consultados por usuarios anónimos, por ello será necesario configurar las credenciales de un usuario autorizado para acceder al mismo utilizando el protocolo LDAP. Para llevar a cabo esta tarea utilizaremos el comando mqsisetdbparms de la siguiente forma:
mqsisetdbparms <integration_node> -n ldap::<servidor_ldap> -u <nombre_usuario_DN> -p <contraseña>
Donde integration_node debe ser nuevamente el nombre del nodo de integración utilizado (IB9NODE), servidor_ldap debe ser el nombre de host donde atiende el servicio de directorio (msad12.mgdevelopers.com) y nombre_usuario_DN será el nombre distinguido (DN) de un usuario con permiso de lectura en el directorio (CN=ldap_binduser, OU=Cuentas de Servicio, OU=Blog, DC=mgdevelopers, DC=com) cuya contraseña se deberá indicar en el parámetro contraseña.
Nota: es posible especificar el valor LDAP reemplazando el nombre de host en el parámetro servidor_ldap, de esta forma se estará definiendo las credenciales por omisión que utilizará un flujo de integración cuando requiera acceso a un servicio de directorio y no se hayan configurado credenciales específicas.
[root@localhost bin]# mqsisetdbparms IB9NODE -n ldap::msad12.mgdevelopers.com -u "CN=ldap_binduser,OU=Cuentas de Servicio,OU=Blog,DC=mgdevelopers,DC=com" -p password BIP8071I: Successful command completion.
Crear un Servicio de Integración de pruebas
A continuación, y pensando en que el lector podría estar dando sus primeros pasos en la plataforma, describiremos la secuencia de pasos para crear un Servicio de Integración que luego utilizaremos para probar el funcionamiento del mecanismo de autenticación:
- Iniciar IBM Integration Toolkit en un nuevo Workspace.
- Seleccionar la opción New Integration Service para iniciar el asistente de creación de un nuevo servicio de integración.
- Definir un nombre para el servicio (MGDevelopersService) e indicar que se creará una nueva interfaz mediante la opción Create a new service interface.
- Presionar Finish para crear el servicio.
- Mantendremos la definición de servicio creada por el asistente ya que aunque es simple nos servirá para probar el mecanismo de autenticación, luego abriremos la operación operation1.
- Agregaremos un nodo de transformación del tipo Mapping lo uniremos a los nodos de entrada y de salida como muestra la siguiente imagen.
- Al intentar abrir el nodo Mapping se presenta un asistente para crear un archivo de correlación con el cual trabaja este tipo de nodos, mantendremos los valores por defecto y presionaremos Next.
- En la próxima pantalla del asistente indicaremos operation1 como mensaje de entrada y operation1Response como mensaje de salida, de esta forma podremos retornar una salida como transformación de la entrada, luego presionaremos Finish para concluir con el asistente.
- En la interfaz de correlación agregaremos una función de concatenación (fn:concat) y uniremos el elemento input1 con la entrada de la función y output1 con la salida.
- Luego como muestra la siguiente imagen, agregaremos el elemento IdentitySourceToken como otra entrada a la función fn:concat, el elemento IdentitySourceToken albergará el nombre de usuario luego que configuremos la seguridad en el flujo de mensajes.
- Para finalizar la configuración del nodo, configuraremos los parámetros de la función de acuerdo a la siguiente imagen, el objetivo es retornar a la salida una transformación de los datos de entrada que incluya el nombre de usuario utilizado para autenticar el requerimiento.
- Grabar el archivo de correlación y luego el flujo de integración.
Pantalla 5 - Creación de un nuevo servicio de integración
Pantalla 6 - Definición del nuevo servicio
Pantalla 7 - Flujo de integración correspondiente a operation1
Pantalla 8 - Asistente para nuevo nodo de correlación
Pantalla 9 - Selección de los mensajes de entrada y salida
Pantalla 10 - Adición de función de concatenación
Pantalla 11 - Adición del elemento IdentitySourceToken a la función de concatenación
Pantalla 12 - Configuración de la función de concatenación
Crear un archivo BAR para alojar al Servicio de Integración
Una vez creado el Servicio de Integración tendremos que crear un archivo BAR que lo contenga para poder desplegarlo en un servidor de integración:
- Crear un nuevo archivo BAR utilizando la acción File > New > BAR file.
- Especificar en la solapa Prepare del archivo BAR el servicio MGDevelopersService creado anteriormente.
- Presionar Build an Save... para crear el archivo de despliegue y grabarlo.
- Presionar el botón derecho sobre el archivo BAR y presionar Deploy... para desplegar el diálogo de despliegue.
- Seleccionar el servidor de integración (default) donde se desea desplegar el servicio y presionar Finish para dar comienzo al proceso de despliegue.
Pantalla 13 - Creación de un nuevo archivo BAR
Pantalla 14 - Construcción del archivo BAR
Pantalla 15 - Despliegue del Servicio de Integración
Prueba del Servicio de Integración antes de requerir autenticación
Antes de configurar la seguridad del flujo de integración será conveniente probar el funcionamiento del Servicio de Integración utilizando un cliente de Servicios Web como SoapUI.
Si el Integration Bus se encuentra configurado por omisión, entonces podremos acceder a la definición del servicio utilizando la url http://server:7800/nombre-servicio?wsdl, en nuestro caso la dirección será http://iib9.mgdevelopers.com:7800/MGDevelopersService?wsdl.
Luego crearemos un proyecto en SoapUI utilizando la definición del servicio verificada anteriormente y dejando que se creen los requerimientos de ejemplo para las operaciones.
Una vez creado el proyecto ejecutaremos un requerimiento sobre el servicio y deberíamos obtener un respuesta similar a la siguiente:
Configuración de la seguridad en el archivo BAR
Es momento de configurar la seguridad en el flujo de integración, para ello será necesario editar el archivo BAR creado anteriormente y luego abrir la solapa Manage.
Cuando se crea un Nodo de Integración, se generan de manera predeterminada un conjunto de políticas (Provider Policy Set) y enlaces (Provider Policy Set Binding) denominados WSS10Default. Estas configuraciones contienen una política de seguridad que especifica que un token correspondiente al nombre de usuario está presente en los requerimientos de entrada al Servicio de Integración, mas específicamente a los nodos SOAPInput del flujo de mensajes asociado al Servicio de Integración.
Seleccionaremos el flujo de integración que posee el nombre del servicio (MGDevelopersService > Resources > MGDevelopersService .msgflow) y estableceremos las propiedades Provider Policy Set, Provider Policy Set Binding y Security Profile Name con los valores de la siguiente tabla:
Parámetro | Valor | Observaciones |
Provider Policy Set | WSS10Default | Conjunto de políticas predeterminado. |
Provider Policy Set Binding | WSS10Default | Enlaces de conjunto de políticas predeterminado. |
Security Profile Name | MGDevelopersLDAP | Nombre del perfil de seguridad que se encuentra asociado al servicio de directorio LDAP. |
Una vez realizada la modificación en el archivo BAR será necesario guardar los cambios y desplegarlo nuevamente en el servidor de integración.
Error de seguridad al intentar ejecutar el Servicio de Integración
Sin realizar modificaciones en el proyecto creado en SoapUI para realizar pruebas sobre el Servicio de Integración nos encontraremos con un error de seguridad al intentar ejecutar el requerimiento que anteriormente funcionaba correctamente:
Pantalla 20 -Requerimiento fallido sobre el Servicio de Integración que requiere autenticación
Configuración de seguridad en SoapUI para llamar al servicio
Una vez que configuramos la seguridad en el Servicio de Integración ya no podremos comunicarnos sin especificar credenciales válidas.
Tendremos que seguir los próximos pasos para configurar el proyecto SoapUI y poder enviar una solicitud válida al Servicio de Integración:
- En primer lugar tendremos que abrir el proyecto SoapUI (MGDevelopersProject en nuestro caso), abrir la solapa WS-Security Configurations y presionar el botón + para agregar una nueva configuración de seguridad aplicable a los requerimientos.
- En el diálogo de nueva configuración especificaremos un nombre (MGDevelopersSecurity) y presionaremos OK para agregar la configuración.
- Seleccionaremos la configuración creada anteriormente y presionaremos el botón + para agregar una nueva entrada en la configuración.
- En el diálogo de nueva entrada especificaremos el valor Username como tipo de entrada y presionaremos OK para agregarla a la configuración.
- En la nueva entrada especificaremos el nombre de usuario en el campo Username y su contraseña en el campo Password, luego será necesario especificar el valor PasswordText en el campo PasswordType para que la contraseña sea visible en el requerimiento.
- Luego será necesario ir a la configuración del requerimiento, abrir la solapa de autorización (Auth) en el panel inferior y seleccionar Add New Authorization... para establecer la configuración de seguridad utilizada por el requerimiento.
- En el diálogo se debe seleccionar el valor Basic como tipo de seguridad y luego se debe presionar Ok para establecer la configuración.
- Luego será necesario seleccionar la configuración creada anteriormente (MGDevelopersSecurity) en el campo Outgoing WSS de la configuración de seguridad propia del requerimiento.
Pantalla 21 - Nueva configuración de seguridad saliente (WS-Security)
Pantalla 22 - Diálogo de nueva entrada de la configuración de seguridad (WS-Security)
Pantalla 23 - Configuración de las credenciales en la entrada de seguridad
Pantalla 24 - Configuración de seguridad a nivel de requerimiento
Pantalla 25 - Diálogo para agregar configuraciones de seguridad al requerimiento
Pantalla 26 - Configuración de seguridad saliente del requerimiento
Ejecución del servicio utilizando la configuración de seguridad
Luego de realizadas todas las configuraciones precedentes, estamos en condiciones de ejecutar un requerimiento al Servicio de Integración, esperar que nos valide las credenciales y nos retorne el resultado.
Conclusiones
En este artículo describimos el procedimiento detallado para configurar la autenticación de un Servicio de Integración de manera que se requiera la incorporación de credenciales válidas en las peticiones de los clientes. Para validar las credenciales se realizó la configuración de un perfil de seguridad dentro de Integration Bus asociado a un servicio de directorio LDAP versión 3.
Es importante destacar que, al realizar la configuración de seguridad para requerir la autenticación de los requerimientos, no se afectó de ninguna forma la implementación del Servicio de Integración, de esta forma la configuración de seguridad se mantiene a nivel de protocolo separada de las tareas de construcción y diseño dentro del Toolkit.