Web Service Security: Consumo de servicios securizados con SAML

Consumo de Servicios securizados con SAML
La mayoría de modelos de seguridad de servicios web implantados bajo una arquitectura orientada a servicios (SOA) apuesta por los perfiles de seguridad en el mensaje de Web Service Security:

  • Username Token Profile para los consumos internos
  • X509 Certificate Token Profile para los consumos procedentes del exterior

¿Qué sucede con el perfil SAML Token Profile? La respuesta es que se suele utilizar principalmente en modelos de seguridad de tipo Single Sign On, pero no siempre se va a dar este escenario. Por ejemplo, pongamos por caso que nuestro sistema no pertenece a ningún modelo de seguridad Single Sign On, pero en cambio, necesita consumir un servicio que está securizado con el perfil SAML Token Profile. ¿Qué se debe hacer para poder consumir este tipo de servicio? A continuación se muestran los distintos pasos necesarios para poder consumir un servicio securizado con SAML desde Oracle Service Bus.

Política de Seguridad

En primer lugar hay que definir una política de seguridad para poder asignarla al business service asociado al servicio que se va a consumir. La política de seguridad viene establecida por el proveedor del servicio, que deberá facilitar información sobre la misma. En el caso de SAML, se necesita saber, además, el método de confirmación del token: Bearer, Sender-Vouches o Holder-Of-Key. Las políticas de seguridad en Oracle Service Bus se pueden definir de tres formas:

  1. Obtenerlas del propio WSDL del servicio, si es que las incluye.
  2. Con Oracle Web Services Manager. Si se dispone del producto, tiene políticas predefinidas y se pueden definir nuevas políticas a partir de las primeras.
  3. Con OSB. También incluye políticas predefinidas y se pueden definir otras nuevas a través de un recurso de tipo Política de Servicio Web.  Una vez definida la política de seguridad adecuada para el servicio a consumir, se aplica al business service de acceso al servicio.

Asignación de Credenciales

Tras aplicar la política de seguridad en el business service, éste último, solicita al dominio de seguridad de WebLogic, que genere un token SAML con la información del usuario que está ejecutando la petición. Por lo tanto, WebLogic debe ser capaz de convertir los datos de un usuario autenticado, en un token SAML. Por este motivo se debe crear un proveedor de asignación de credenciales en el dominio de seguridad de WebLogic, que se encargará de convertir la información de un usuario de WebLogic a formato de token SAML.

Creación de Proveedor de Asignación de Credenciales


Usuario de Confianza

El usuario de confianza representa al servicio que se quiere consumir y se debe crear en el proveedor de asignación de credenciales para que éste genere el token SAML. Por lo tanto, se debe crear un usuario de confianza distinto por cada servicio securizado con SAML que se quiera consumir.

Personalización de Atributos

La configuración del proveedor de Asignación de Credenciales realizada hasta ahora genera el token SAML únicamente con información del usuario y de los grupos a los que pertenece dicho usuario.

….

      <saml:AttributeStatement>

         <saml:Subject>

            <saml:NameIdentifier Format=”urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified” NameQualifier=”http://www.avanttic.com”>weblogic</saml:NameIdentifier&gt;

            <saml:SubjectConfirmation>

               <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:sender-vouches</saml:ConfirmationMethod>

            </saml:SubjectConfirmation>

         </saml:Subject>

         <saml:Attribute AttributeName=”Groups” AttributeNamespace=”urn:bea:security:saml:groups” xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”&gt;

            <saml:AttributeValue>Administrators</saml:AttributeValue>

            <saml:AttributeValue>IntegrationAdministrators</saml:AttributeValue>

            <saml:AttributeValue>AdminChannelUsers</saml:AttributeValue>

         </saml:Attribute>

      </saml:AttributeStatement>

….

¿Qué sucede si se necesita enviar atributos adicionales a usuario y grupos, por ejemplo, nombre, apellidos, organización, etc? WebLogic Server permite la personalización del proveedor de asignación de credenciales para que se mapeen los atributos necesarios. ¿Cómo se puede hacer esto? La respuesta es mediante la implementación de las interfaces java de Asignación de Credenciales de WebLogic Server. Una vez se dispone de la clase de implementación, hay que especificar en el proveedor de asignación de credenciales que utilice la nueva implementación y no la que proporciona WebLogic Server por defecto.

Establecimiento de Clase de Asignación de Atributos
Tras la personalización del mapeo de atributos del proveedor de credenciales, se generaría un token SAML ya con los atributos personalizados.

      <saml:AttributeStatement>

         <saml:Subject>

            <saml:NameIdentifier Format=”urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified” NameQualifier=”http://www.avanttic.com”>weblogic</saml:NameIdentifier&gt;

            <saml:SubjectConfirmation>

               <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:sender-vouches</saml:ConfirmationMethod>

            </saml:SubjectConfirmation>

         </saml:Subject>

         <saml:Attribute AttributeName=”urn:system:service:1.0:urn:system:service:1.0:nombre” AttributeNamespace=”urn:system:service:1.0:uri” xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”&gt;

            <saml:AttributeValue>Antonio José</saml:AttributeValue>

         </saml:Attribute>

         <saml:Attribute AttributeName=”urn:system:service:1.0:urn:system:service:1.0:apellido1″ AttributeNamespace=”urn:system:service:1.0:uri” xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”&gt;

            <saml:AttributeValue>Molina</saml:AttributeValue>

         </saml:Attribute>

         <saml:Attribute AttributeName=”urn:system:service:1.0:urn:system:service:1.0:apellido2″ AttributeNamespace=”urn:system:service:1.0:uri” xmlns:xsd=”http://www.w3.org/2001/XMLSchema&#8221; xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”&gt;

            <saml:AttributeValue>Moreno</saml:AttributeValue>

         </saml:Attribute>

      </saml:AttributeStatement>

Como se puede comprobar, con estos pocos pasos se puede configurar OSB/WebLogic Server para generar tokens SAML que cumplan con los requerimientos de seguridad de un servicio web. Para más información, os dejamos los siguientes links a la documentación de Oracle:

Twitter
LinkedIn
Evolución, innovación y transformación
37 Service Expertise avalados por Oracle 
Nuestra propuesta de valor
Posts 100% Oracle
Sigue nuestro día a día