2009-06-25 13 views
5

Tengo un servidor de jabón que se crea de este modo:¿Agregar funcionalidad de autenticación al servidor de jabón (usando Zend)?

class ServerController extends Zend_Controller_Action 
{ 
    public function serverAction() 
    { 
     memcache_flush(); 
     Zend_Registry::get('cache')->clean(Zend_Cache::CLEANING_MODE_ALL); 

     $server = new SoapServer("http://####/services/soap-server/wsdl"); 
     $server->setClass('SOAP_Server_Map'); 
     $server->handle(); 
    } 
} 

Quiero añadir autenticación a ella de manera que cada vez que alguien hace una llamada a una función en "SOAP_Server_Map", se comprueba que las credenciales suministradas en el Las opciones de SoapClient array ('login' y 'password') son válidas.

¿Alguien tiene alguna sugerencia/ayuda?

Respuesta

0

tengo exactamente el mismo problema y tengo las siguientes reflexiones:

No sé si SOAP es/debe ser completa de estado o sin estado, podemos abrir una sesión y si el usuario ha suministrado alguna forma de credencial mantenerla conectada durante un período de tiempo?

La otra manera en que yo estoy pensando en resolver esto es a través de la API-llaves, dicen, por ejemplo, dando una clave: ABCDKEY y tener la URL como:

http://####/services/soap-server/ABCDKEY

Esto introduce riesgos de seguridad (el enlace de la magia ataque), pero lo he visto implementado en fuentes RSS personalizadas, etc. ¿Algún comentario?

+0

Por qué reinventar la rueda? La autenticación HTTP está ahí por una razón. –

5

Para añadir autenticación a cualquiera Zend_Soap_Server o Zend_Json_Server, sólo tiene que especificar la autenticación HTTP, ya sea en su servidor HTTP (es decir: Apache) de configuración o un archivo .htaccess. El siguiente archivo .htaccess debería funcionar:

AuthType Basic 
AuthName "Supreme Data Services" 
AuthUserFile /var/www/localhost/passwd 
Require valid-user 

Asegúrese de mantener su archivo de contraseña fuera del docroot por razones de seguridad. El archivo de contraseña se puede hacer usando htpasswd que viene con Apache. Naturalmente, puede usar tipos de autenticación más avanzados.

Para hacer uso de los servicios, ahora debe especificar un nombre de usuario y contraseña al realizar una solicitud. Si está utilizando Zend Framework para crear su cliente, puede hacer lo siguiente para SOAP:

$client = new Zend_Soap_Client($wsdl, array('login' => $username, 'password' => $password)); 

Y lo siguiente para JSONRPC:

$http = new Zend_Http_Client(); 
$http->setAuth($username, $password); 
$client = new Zend_Json_Client($uri, $http); 
+0

Seguramente esto solo proporciona un nivel de protección muy básico. ¿Cree que vale la pena investigar SSL o ws-security? –

+0

Según lo sugerido en mi respuesta "Naturalmente, puede utilizar tipos de autenticación más avanzados". La autenticación y el cifrado pueden estar relacionados. Sin embargo, no son lo mismo. ¿Qué te gustaría proteger? ¿Acceso o los datos en sí? Probablemente deberías al menos usar AuthType Digest. Si los datos son confidenciales, por supuesto, agregue cifrado (SSL). Tenga en cuenta que el cliente debe admitir los mecanismos de autenticación y cifrado. Desafortunadamente, algunos clientes SOAP solo son compatibles con la autenticación básica. : / –

Cuestiones relacionadas