dev-master
9999999-devSymfony Wsse Server Bundle
MIT
The Requires
authentication security bundle soap wsse besimple
Symfony Wsse Server Bundle
Bundle para la autenticación de servidores soap usando WSSE, (*1)
La idea del bundle es facilitar la implementación de la seguridad WSSE en un servidor soap. El bundle ofrece una anotación que permite asegurar un controlador o una acción concreta, donde, añadiendo la anotación @Ku\Bundle\WsseServerBundle\Annotation\CheckWsseSecurity()
hacemos que la acción soap requiera de las siguientes cabeceras:, (*2)
PasswordDigest
y una clave secreta que comparten tanto servidor como cliente.PasswordDigest
.generateNonce
del servicor soap.Agregar al composer.json:, (*3)
"require" : { "manuelj555/wsse-server-bundle": "1.0.*@dev", }
Y ejecutar, (*4)
composer update
Luego de ello, registrar el bundle en el AppKernel.php:, (*5)
public function registerBundles() { $bundles = array( ... new Ku\Bundle\WsseServerBundle\WsseServerBundle(), ); ... }
El bundle contiene una pequeña configuración para su funcionamiento:, (*6)
# app/config/config.yml wsse_server: # application_repository_service: wsse_server.application.default_application_repository # Valor por defecto applications: 'Nombre': username: nombre_de_usuario password: clave # parameters: # adicional: parameter
Basicamente se deben/pueden configurar dos cosas:, (*7)
applications
buscando por el username
. Este servicio puede ser cambiando creando uno propio que implementé la interfaz Ku\Bundle\WsseServerBundle\Application\ApplicationRepositoryInterface
, por ejemplo para manejar las aplicaciones en una base de datos, etc.PasswordDigest
.Este bundle requiere de que el servidor soap se haya creado utilizando el bundle BeSimpleSoapBundle
, y basicamente para activar la seguridad en una acción de un controlador soap se debe incluir la anotación @Ku\Bundle\WsseServerBundle\Annotation\CheckWsseSecurity()
de la siguiente forma:, (*8)
<?php namespace AppBundle\Controller; use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap; use Ku\Bundle\WsseServerBundle\Annotation\CheckWsseSecurity; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class WebServiceController extends Controller { /** * * @Soap\Method("AlgunaAccionSoap") * @Soap\Param("parametro1", phpType = "string") * @Soap\Result(phpType = "string") * * @CheckWsseSecurity() Acá está la mágia */ public function accion1Action($parametro1) { // ... Método protegido por wsse } /** * * @Soap\Method("otraAccionSoap") * @Soap\Result(phpType = "string") * * @CheckWsseSecurity() */ public function accion2Action($_application) { // ... Método protegido por wsse // Si agregamos un argumento de nombre $_application tendremos disponible el objeto // Applicacion devuelto por el ApplicationRepository, y podremos // Obtener información relevante para la aplicación. } /** * @Soap\Method("otraAccion2Soap") * * @Soap\Result(phpType = "int") */ public function accion3Action() { // ... Método que no está protegido con wsse } }
El código anterior muestra como podemos asegurar varios métodos de un servidor soap de manera simple con el uso de la anotación CheckWsseSecurity
., (*9)
Importante: Si queremos asegurar un todos los métodos de un controlador soap, basta con añadir la anotación en la clase:, (*10)
<?php namespace AppBundle\Controller; use BeSimple\SoapBundle\ServiceDefinition\Annotation as Soap; use Ku\Bundle\WsseServerBundle\Annotation\CheckWsseSecurity; use Symfony\Bundle\FrameworkBundle\Controller\Controller; /** * @CheckWsseSecurity() Con esto todos los métodos del controlador estarán protegidos. */ class WebServiceController extends Controller { // ... }
Por último es importante resaltar que el hecho de añadir la anotación a un método o a la clase de un controlador Soap, provoca que se cree una acción llamada generateNonce
de forma automatica en el wsdl, para que el cliente puede obtener el valor del nonce que se usa para la creación del PasswordDigest
., (*11)
PasswordDigest
en el cliente.PasswordDigest
.Symfony Wsse Server Bundle
MIT
authentication security bundle soap wsse besimple