Sep 142014
 
Artículo PHP

En nuestro anterior artículo “Cómo implementar Web Services WSDL SOAP en PHP” hemos explicado la manera de implementar un servicio WSDL sobre protocolo SOAP, pero no hemos entrado en consideraciones de seguridad.

En este artículo examinamos las alternativas que existen para permitir el acceso al servicio únicamente a usuarios autorizados con un nombre de usuario y contraseña.

Validación implementada en el servidor web

Para implementar una capa de seguridad en el servicio WSDL, una posible alternativa es utilizar la funcionalidad que ofrece el servidor web:

Normalmente, el servidor web sobre el cual se ejecuta el servicio dispone de sus propios mecanismos para configurar una validación de usuario mediante nombre de usuario/contraseña.

Por ejemplo en el servidor web apache se pueden utilizar los módulos mod_auth_basic y mod_auth_ssl para configurar una Validación Básica HTTP.

En este artículo no entraremos en el detalle de este tipo de implementación, sobre la cual hay abundante documentación disponible en la red, y que no implica modificar el código PHP.

Validación Básica

Para implementar este tipo de validación debemos editar el cliente y el servidor:

  • Por una parte, hay que programar el cliente para que envíe el usuario y contraseña en cada solicitud que envía al servidor
  • Por otra parte, hay que programar el servidor para que, cuando reciba una petición, lea primero el usuario y contraseña, y proceda a su validación. Si la validación es correcta, se ejecuta la función solicitada y se entrega el resultado. Si la validación falla, se devuelve un mensaje de error.

Enviar el usuario y contraseña con cada solicitud

Para que el cliente envíe el usuario y contraseña con cada solicitud que realiza, basta con especificarlos como opciones en el momento de crear el objeto cliente:

Validar en el servidor el usuario y contraseña recibidos

En el lado servidor, el proceso de cada solicitud recibida debe ir precedido por la validación del usuario y contraseña que la acompañan.

Por ejemplo, modificamos el servicio sumar que habíamos presentado en nuestro anterior artículo, de la siguiente forma:

Como vemos, el servidor recibe, en las entradas ‘PHP_AUTH_USER’ y ‘PHP_AUTH_PW’ del array global $_SERVER,  los valores que fueron establecidos para los parámetros ‘login’ y ‘password’ al crear el objeto ‘SOAPClient’ .

La función de validación es_usuario_valido() se puede implementar, en el caso más sencillo, como en el siguiente ejemplo:

Proceso de errores en la llamada al servicio WSDL

Como podemos ver en el ejemplo de arriba, el servidor llama al método SOAPFault cuando se produce un fallo en la validación. Por defecto, esto genera una excepción, por lo que la manera normal de capturar y procesar este evento en el cliente es haciendo la llamada al servicio dentro de un bloque try…catch. Por ejemplo:

Alternativamente, se puede especificar el parámetro adicional exceptions => 0 en la creación del cliente SOAP. En este caso, cuando se produce un error no se genera una excepción, y es necesario comprobar el resultado de la llamada mediante una llamada a la función "is_soap_fault()":

Artículos relacionados

Referencias

Indice de artículos sobre programación en PHP

 Publicado por en 4:23 pm

 Deja un comentario

(requerido)

(requerido)