manuelj555/wsse-server-bundle

Symfony Wsse Server Bundle

安装: 86

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 3

分支: 1

开放问题: 1

类型:symfony-bundle

dev-master / 1.0.x-dev 2016-02-12 23:18 UTC

This package is auto-updated.

Last update: 2024-09-22 03:04:05 UTC


README

用于使用 WSSE 进行服务器 soap 认证的包

该包的目的是简化在 soap 服务器中实现 WSSE 安全性的过程。该包提供了一个注解,允许对控制器或特定动作进行安全验证,通过添加注解 @Ku\Bundle\WsseServerBundle\Annotation\CheckWsseSecurity(),使得 soap 动作需要以下头部信息

  • Username:在服务器和客户端之间设置的 soap 通信的用户名。
  • PasswordDigest:客户端使用从服务器预先获得的 nonce 生成的密钥,结合 PasswordDigest 的创建日期和服务器与客户端共享的密钥。
  • Created:创建 PasswordDigest 使用的日期。
  • Nonce:调用 soap 服务器的 generateNonce 动作时获得的 nonce 值。

安装

将以下内容添加到 composer.json 中

"require" : {
    "manuelj555/wsse-server-bundle": "1.0.*@dev",
}

然后执行

composer update 

之后,在 AppKernel.php 中注册该包

public function registerBundles()
{
    $bundles = array(
        ...
        new Ku\Bundle\WsseServerBundle\WsseServerBundle(),
    );

    ...
}

配置

该包包含一些基本配置以供使用

# 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

基本上需要/可以配置以下两项

  • application_repository_service:代表应用程序存储库的服务,默认使用包中提供的一个,该服务通过在配置 applications 部分中查找 username 返回设定的应用程序。可以通过创建一个实现 Ku\Bundle\WsseServerBundle\Application\ApplicationRepositoryInterface 接口的自定义服务来更改此服务,例如用于处理数据库中的应用程序等。
  • applications:在此处定义与 soap 服务器连接的可能应用程序(如果使用自定义应用程序存储库,则不需要在此处定义任何应用程序)。目的是给应用程序命名,并在其中定义
    • username:客户端在凭证中发送的用户名(此值由应用程序存储库用于获取和返回应用程序的连接数据)。
    • password:客户端和服务器之间设置的用于创建 PasswordDigest 的内部密码。
    • parameters(可选):用于处理所需额外信息的数组。

使用

此包需要使用 BeSimpleSoapBundle 创建 soap 服务器,并且为了激活 soap 控制器的安全验证,需要在动作中包含注解 @Ku\Bundle\WsseServerBundle\Annotation\CheckWsseSecurity(),如下所示

<?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
    }
}

上面的代码示例展示了如何使用注解 CheckWsseSecurity 简单地保护 soap 服务器的多个方法。

重要:如果需要保护 soap 控制器的所有方法,只需在类中添加注解即可。

<?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
{
   // ...
}

最后,需要强调的是,将注解添加到 soap 控制器的类或方法中会自动在 wsdl 中创建一个名为 generateNonce 的动作,以便客户端可以获取用于创建 PasswordDigest 的 nonce 值。

待办事项

  • 添加客户端如何创建 PasswordDigest 的信息。
  • 创建库以简化客户端创建SOAP头部的操作,同时结合使用PasswordDigest