2009-06-25 11 views
5

Mam serwer mydła, który jest tworzony w taki sposób:Dodawanie funkcji uwierzytelniania do serwera mydła (przy użyciu 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(); 
    } 
} 

Chcę dodać uwierzytelniania do niego tak, że gdy ktoś sprawia, że ​​wywołanie funkcji w „SOAP_Server_Map”, sprawdza czy poświadczenia dostarczane w Tablica opcji SoapClient ("login" i "hasło") są poprawne.

Czy ktoś ma jakieś sugestie/pomoc?

Odpowiedz

0

Mam dokładnie ten sam problem i mam następujące przemyślenia:

ja nie wiem, czy SOAP jest/powinno być państwo całości lub bezpaństwowiec, możemy otworzyć sesję, a jeśli użytkownik dostarczył pewną formę poświadczenia zachować ją zalogowany przez pewien okres czasu?

Inny sposób myślę o rozwiązywaniu tego jest poprzez API-kluczy, powiedzmy na przykład dając klucz: ABCDKEY i mającego url jak:

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

Wprowadza zagrożenia bezpieczeństwa (magia łącza atak), ale widziałem to zaimplementowane w kanałach RSS spersonalizowanych itp. Jakieś komentarze?

+0

Dlaczego ponownie wymyślać koła? Uwierzytelnianie HTTP jest nie bez powodu. –

5

Aby dodać uwierzytelnianie albo Zend_Soap_Server lub Zend_Json_Server, wystarczy określić uwierzytelnianie HTTP w obu serwera HTTP (tj: config Apache) lub pliku .htaccess. Powinien działać następujący plik .htaccess:

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

Upewnij się, że przechowujesz swój plik haseł poza dokumentacją dla celów bezpieczeństwa. Plik haseł można utworzyć za pomocą htpasswd dołączonego do Apache. Oczywiście można użyć bardziej zaawansowanych typów uwierzytelniania.

Aby skorzystać z usług, należy podać nazwę użytkownika i hasło podczas składania żądania. Jeśli używasz Zend Framework do tworzenia swojego klienta, można wykonać następujące czynności na mydło:

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

A po za JSON-RPC:

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

Z pewnością zapewnia to bardzo podstawowy poziom ochrony. Czy uważasz, że warto zająć się zabezpieczeniami SSL lub ws-security? –

+0

Jak zasugerowano w mojej odpowiedzi "Oczywiście, możesz użyć bardziej zaawansowanych typów uwierzytelniania". Uwierzytelnianie i szyfrowanie mogą być powiązane. Jednak nie są one tym samym. Co chciałbyś chronić? Dostęp lub same dane? Prawdopodobnie powinieneś przynajmniej korzystać z AuthType Digest. Jeśli dane są wrażliwe, to oczywiście dodaj szyfrowanie (SSL). Należy pamiętać, że klient musi obsługiwać mechanizmy uwierzytelniania i szyfrowania. Niestety niektórzy klienci SOAP obsługują tylko uwierzytelnianie podstawowe. : / –