Seguridad y la infraestructura de servicios web de HCL Commerce

La especificación WS-Security (http://www.oasis-open.org/committees/wss/) define varias técnicas para implementar seguridad en los servicios web.

De forma predeterminada, todas las solicitudes de servicio web reciben la autenticación del usuario genérico. Sin embargo, puesto que gran parte de la lógica de negocio de HCL Commerce que se muestra mediante servicios web no puede ser ejecutada por el usuario genérico, se puede hacer uso de WS-Security para permitir la utilización de diferentes credenciales.

Las secciones siguientes tratan las consideraciones de seguridad que afectan a la habilitación de los servicios web de HCL Commerce.

Autenticación básica

Una de las técnicas para la seguridad de servicios web es la basic authentication. Con esta técnica, las credenciales del usuario se adjuntan a la cabecera del sobre SOAP. El principal inconveniente de la autenticación básica es que la información de autenticación se encuentra en el texto sin formato dentro del mensaje SOAP. Si el protocolo de transporte subyacente no es seguro, un atacante con las herramientas de supervisión de red adecuadas podrá acceder a la información fácilmente. En consecuencia, la autenticación básica debería utilizarse siempre con un protocolo de transporte subyacente seguro, como HTTPS.

El siguiente es un ejemplo de una solicitud SOAP que utiliza autenticación básica:

<soapenv:Envelope
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <wsse:UsernameToken>
        <wsse:Username>myUserName</wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
          myPassword
        </wsse:Password>
      </wsse:UsernameToken>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body>
    <!-- message pay load -->
  </soapenv:Body>
</soapenv:Envelope>

De conformidad con la especificación WS-Security más reciente, las credenciales de usuario se encuentran dentro del nodo de seguridad de la cabecera SOAP. Este nodo es el contenedor para la información de seguridad que debería asociarse a la solicitud de servicio web.

Cuando se utiliza la autenticación básica para autenticar un usuario, el controlador de servicio web de HCL Commerce extrae la información de credenciales de la cabecera SOAP. El controlador llama al servicio de contexto de negocio para iniciar una nueva sesión que se basa en las credenciales encontradas. Esta sesión establece una actividad asociada al usuario especificado, pero la actividad solo existe durante el tiempo que dure el proceso de la solicitud. Se presupone que la actividad no es necesaria para procesar las solicitudes subsiguientes, y la señal de actividad no se devuelve al cliente de llamada. Una vez que se ha atendido la solicitud, la actividad se completará y ya no podrá utilizarse para otras solicitudes.

Seguridad de WebSphere

Cuando la seguridad global de WebSphere esté habilitada, el motor de servicios web de WebSphere Application Server autenticará el usuario y colocará sus credenciales en la hebra. El controlador de servicios web, a su vez, creará una actividad temporal con el ID de usuario obtenido del contexto de autenticación de la hebra.

Esta técnica hace uso de la seguridad de WebSphere y del motor de servicios web para autenticar el usuario y no requiere ninguna implementación adicional para leer las credenciales de la hebra.

Autenticación del protocolo

Nota: El método de autenticación de protocolo solo es aplicable si se utiliza una de las clases siguientes:

La necesidad de que la seguridad esté habilitada en el servidor de aplicaciones puede dar como resultado una penalización del rendimiento. Puesto que el certificado es un concepto del protocolo de transporte, puede seguir utilizando este enfoque de certificado sin afectar el rendimiento si permite que el transporte proporcione esta validación sin habilitar la seguridad global de WebSphere.

Una solución es utilizar una etiqueta genérica, denominada secureTransportProtocol. Cuando las credenciales no se encuentran en las solicitudes de servicio web y esta etiqueta está establecida, se utiliza el usuario de mensajes predeterminado en lugar de la autoridad de un usuario genérico para ejecutar las solicitudes. Esta etiqueta genérica se encuentra en la sección Mensajes del HCL Commercearchivo de configuración. Cuando el valor de esta etiqueta esté establecido en true, la infraestructura de servicios web presupondrá que el protocolo se ha configurado para proporcionar validación de las credenciales de la solicitud. El ID de usuario para la actividad es el del usuario de mensajes predeterminado. En el fragmento de configuración de ejemplo que figura a continuación, cualquier solicitud sin credenciales se ejecuta con la autorización de wcsadmin.

<Messaging
  EcInboundMessageDtdFiles="NCCommon.mod, NCCustomer_10.mod"
  EcInboundMessageDtdPath="messaging"
  EcMimePropFile="lang_mime.data"
  EcSystemTemplateFile="sys_template.xml"
  EcTemplatePath="messaging"
  EcUserTemplateFile="user_template.xml"
  
XMLWebControllerUserId="wcsadmin"
  secureTransportProtocol="true" />
Nota: El distintivo secureTransportProtocol no se puede establecer con el Gestor de configuración. Debe editar el HCL Commercearchivo de configuración directamente.

Importante: El uso de esta técnica implica que todas las precauciones de seguridad necesarias existen en la capa de transporte para asegurar la transmisión segura de mensajes y validación de solicitudes. Si el transporte no es seguro y la etiqueta secureTransportProtocol está establecidoaen true, cada solicitud no autenticada se ejecutará con la autorización del usuario de mensajería predeterminado. El uso de esta autorización puede ser un riesgo de seguridad.

Señal de actividad

La activity token es una forma de establecer una sesión para un protocolo que normalmente no tiene sesiones.

HCL Commerce infraestructura servicios web utiliza la arquitectura conectable de señales personalizadas que proporciona el motor de servicios web de WebSphere Application Server para colocar la señal de actividad en la cabecera SOAP de la solicitud. La única diferencia entre esta forma de autenticación y otros métodos de autenticación es que la actividad no se completará después de que se atienda la solicitud. La actividad se mantendrá para utilizarla en solicitudes subsiguiente.

Para recuperar la información de señal de actividad, puede llamar a los métodos MemberFacadeClient.authenticatePassword o authenticateLTPA para autenticar el usuario y recuperar las señales. Para obtener más información sobre los métodos de autenticación, consulte com.ibm.commerce.member.facade.client. Para obtener más información sobre el mensaje de autenticación de contraseña, consulte Nombre Persona

El siguiente es un ejemplo de una solicitud SOAP que utiliza una señal de actividad:

<soapenv:Envelope
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header>
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsswssecurity-secext-1.0.xsd"> 
      <wc:IdentityToken xmlns:wc="http://www.ibm.com/xmlns/prod/WebSphereCommerce"> 
        <wc:IdentityIdentifier>10001</wc:IdentityIdentifier>
        <wc:Signature>poifhhOgAs+eRlajfn7mzt+m3Dqbw=</wc:Signature>
      </wc:IdentityToken>
    </wsse:Security>
  </soapenv:Header>
  <soapenv:Body>
    <!-- message pay load -->
  </soapenv:Body>
</soapenv:Envelope>