2009-06-25 19 views
5

Ho un server di sapone che si crea in questo modo:Aggiunta della funzionalità di autenticazione al server soap (utilizzando 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(); 
    } 
} 

voglio aggiungere l'autenticazione ad esso in modo che ogni volta che qualcuno effettua una chiamata a una funzione in "SOAP_Server_Map", controlla che le credenziali fornite nella Gli array di opzioni SoapClient ('login' e 'password') sono validi.

Qualcuno ha qualche suggerimento/aiuto?

risposta

0

Ho esattamente lo stesso problema e ho i seguenti pensieri:

Non so se SOAP è/dovrebbe essere stato pieno o apolide, possiamo aprire una sessione e se l'utente ha fornito una qualche forma di credenziali ti tiene loggato per un certo periodo di tempo?

L'altro modo Sto pensando di risolvere questo è attraverso API-chiavi, diciamo per esempio dando una chiave: ABCDKEY e avendo l'URL come:

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

Questo introduce rischi per la sicurezza (il link magia attacco), ma l'ho visto implementato nei feed RSS personalizzati, ecc. Eventuali commenti?

+0

Perché reinventare la ruota? L'autenticazione HTTP è lì per un motivo. –

5

Per aggiungere l'autenticazione a uno o Zend_Soap_Server Zend_Json_Server, basta specificare l'autenticazione HTTP o nel vostro server HTTP (vale a dire: Apache) config o file .htaccess. Il seguente file .htaccess dovrebbe funzionare:

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

Assicurarsi di mantenere il file della password fuori dalla docroot per motivi di sicurezza. Il file delle password può essere creato usando htpasswd fornito con Apache. Naturalmente, puoi utilizzare tipi di autenticazione più avanzati.

Per utilizzare i servizi, è necessario specificare un nome utente e una password quando si effettua una richiesta. Se si sta utilizzando Zend Framework per creare il client, è possibile effettuare le seguenti operazioni per SOAP:

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

E quanto segue per JSONRPC:

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

Sicuramente questo fornisce solo un livello base di protezione. Pensi che la sicurezza SSL o ws valga la pena di essere esaminata? –

+0

Come suggerito nella mia risposta "Naturalmente, è possibile utilizzare tipi di autenticazione più avanzati". Autenticazione e crittografia possono essere correlati. Tuttavia non sono la stessa cosa Cosa ti piacerebbe proteggere? Accesso o i dati stessi? Probabilmente dovresti almeno usare AuthType Digest. Se i dati sono sensibili, ovviamente aggiungi la crittografia (SSL). Tenere presente che il client deve supportare i meccanismi di autenticazione e crittografia. Sfortunatamente, alcuni client SOAP supportano solo l'autenticazione di base. : / –

Problemi correlati