2009-06-25 49 views
5

我有一個像這樣創建SOAP服務器:向soap服務器添加驗證功能(使用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(); 
    } 
} 

我想驗證添加到它,這樣每當有人使得「SOAP_Server_Map」對函數的調用,它會檢查,在提供的憑據SoapClient選項數組('login'和'password')是有效的。

有沒有人有任何建議/幫助?

回答

0

我有完全同樣的問題,我有以下想法:

我不知道SOAP是/應該是全狀態或無國籍,我們可以打開一個會話,如果用戶提供某種形式的憑證讓她登錄一段時間?

我想解決這個的另一種方式是通過API密鑰,比方說給一個鍵:ABCDKEY和具有URL爲:

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

這會帶來安全隱患(魔術鏈接攻擊),但我已經看到它在RSS個性化的飼料等實施。 有什麼意見?

+0

爲什麼要重新發明輪子? HTTP認證是有原因的。 – 2012-04-27 07:14:04

5

添加驗證要麼Zend_Soap_Server或Zend_Json_Server,只需指定或者您的HTTP服務器(如:Apache)的在HTTP認證配置或.htaccess文件。下面的.htaccess文件應該工作:

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

請確保您的密碼文件出於安全目的而保留在docroot之外。密碼文件可以通過使用Apache附帶的htpasswd來完成。當然,您可以使用更高級的身份驗證類型。

爲了使用服務,您現在必須在提出請求時指定用戶名和密碼。如果您使用Zend框架來創建你的客戶,你可以做SOAP如下:

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

而對於JSONRPC如下:

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

當然,這隻能提供非常基本的保護。你認爲SSL或ws-security值得關注嗎? – 2012-05-09 13:57:39