jueves, 17 de noviembre de 2011

Hacking Web Services [Parte I]

En mis ratos productivos, soy programador Java. Esto me ha llevado hace poco a investigar sobre "Web Services", algo que se está poniendo de moda con eso de la Arquitertura Orientada a Servicios (SOA).

¿Qué es un Web Service? Wikipedia al rescate...
"Un servicio web (en inglés, Web service) es una pieza de software que utiliza un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios web para intercambiar datos en redes de ordenadores como Internet."
La utilidad de un web service radica en la reutilización de servicios, incluso de terceros, independientemente de la arquitectura. Para ello, como menciona la wikipedia, es necesario el uso de protocolos comunes que faciliten la comunicación entre aplicaciones.

El protocolo que se las trae en esto de los web services es SOAP (Simple Object Access Protocol). Este es un protocolo basado en XML que se utiliza para el intercambio de mensajes entre el proveedor del servicio y el consumidor. Esto es, el cliente envía un "SOAP-Request" donde se indica el nombre del método que se quiere ejecutar y los parámetros que se le van a pasar. El servidor recibe el mensaje, lo parsea, invoca el método correspondiente y devuelve el resultado en un "SOAP-Response". Todos los objetos enviados, ya sean como parámetros o como respuesta, son serializados usando XML.

Fig. 1 - Intercambio de mensajes SOAP.
El protocolo SOAP fue diseñado para ser independiente del transporte es por eso que se puede utilizar sobre cualquier protocolo que sirva para enviar texto plano, como por ejemplo HTTP o SMTP entre otros. Sin embargo el HTTP presenta algunas ventajas sobre los demás (la comunicación es de ida y vuelta) y es por eso que hablamos de web services y no de mail services.

La forma de enviar un mensaje SOAP sobre HTTP es mediante el cuerpo de una peticion POST. Ahí se enviará el documento XML.

SOAP resuelve el problema de la comunicación entre aplicaciones. Pero aún hay otro problema: la descripción del servicio ¿Cómo sabe el cliente el nombre de los métodos disponibles, los parámetros que reciben, el tipo de los parámetros, la URL del web service, etc? Todo ello es tarea de otro protocolo llamado WSDL (Web Service Description Language).

WSDL describe en un documento XML todos los detalles del servicio web para que cualquier eventual cliente pueda hacer uso del mismo. Para esto, además, dicho documento debe ser accesible de forma pública.

Así que podemos usar algo de Google Hacking para buscar documentos WSDL en internet. Estos son algunos dorks:
  • inurl:"asmx?wsdl"
  • inurl:"jws?wsdl"
  • ext:wsdl
  • ext:asmx
  • ext:jws

Fig. 2 - Buscando Web Services.
Como se puede ver en la imagen, no son pocos.

Una vez conseguido el documento WSDL ya tenemos información suficiente para empezar a interactuar con el web service. Para hacerlo, vamos a utilizar "soapUI", una herramienta que nos permite testear servicios web. Pueden descargarla desde su web oficial:

http://www.soapui.org/

Una vez instalada, abran la interface de soapUI y presionen la combinación "CTRL + N" para crear un nuevo proyecto. Aparecerá un cuadro de dialogo como en la imagen.

Fig. 3 - Nuevo proyecto soapUI.
Solo hay que poner la URL del documento WSDL en la caja de texto "Initial WSDL/WADL" y darle clic al boton OK. SoapUI automáticamente interpretará el documento, nos mostrará la lista de métodos disponibles y creará una plantilla de mensaje SOAP para cada método.

Fig. 4 - Métodos y plantillas SOAP Request.
En la imagen vemos que existe un único método llamado "HelloWorld" disponible tanto para la versión 1.1 de SOAP como para la 1.2. Además se ha creado una plantilla "Request" para cada versión del método. Dale doble clic a cualquiera de las plantillas para ver el cuerpo del mensaje SOAP.

Fig. 5 - Solicitud y Respuesta SOAP.
En la parte izquierda aparece la solicitud SOAP, en este caso no recibe ningun parámetro. Para enviar el mensaje solo debemos dar clic en el boton verde de play que está más arriba. Luego en la parte derecha aparecerá la respuesta SOAP, en este caso solo contiene la cadena de caracteres "Hello World!".

Bién, hasta aquí la primera parte.

Saludos.

Actualización:

Otros capítulos de la serie:

2 comentarios:

  1. Muy interesante!!! Luego de esta avalanca de proyectos investigaré más

    ResponderEliminar
  2. Ahora que vienen las vacaciones, no hay excusa ;)

    Saludos...

    ResponderEliminar