manuelj555 / wsse-server-bundle
Symfony Wsse Server Bundle
dev-master / 1.0.x-dev
2016-02-12 23:18 UTC
Requires
- php: >=5.3.3
- besimple/soap: 0.2.*
- symfony/framework-bundle: ~2.3|~3.0
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
。