2009-06-25 21 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の場合は/、状態フルまたはステートレスである必要があり、我々はセッションを開くことができ、ユーザーはいくつかのフォームを供給しているかどうかを知りません資格情報の彼女は一定の期間ログインしていますか? ABCDKEYとしてURLを持つ:

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

これは、セキュリティ上のリスクを紹介(マジックリンク

私はこれを解決することを考えています他の方法は、API-キーを介して行われ、例えば、キーを与えるためと言います攻撃)、私はそれがRSSパーソナライズされたフィードなどで実装されて見たことがあります コメントはありますか?

+0

なぜホイールを再発明しますか? HTTP認証には理由があります。 –

5

を。次の.htaccessファイルは正常に動作するはずです。

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

セキュリティ上の理由から、パスワードファイルをdocrootから取り出してください。パスワードファイルはApacheに付属のhtpasswdを使って作ることができます。当然、より高度な認証タイプを使用することができます。

サービスを利用するには、リクエスト時にユーザー名とパスワードを指定する必要があります。

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

そしてJSONRPCのために、以下の:あなたがあなたのクライアントを作成するために、Zend Frameworkのを使用している場合は、SOAPのために次の操作を行うことができます

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

これは確かに非常に基本的なレベルの保護しか提供しません。あなたはSSLやws-securityが検討する価値があると思いますか? –

+0

私の答えに示唆されているように、当然、より高度な認証タイプを使用することができます。認証と暗号化が関連している可能性があります。しかし、彼らは同じことではありません。あなたは何を保護しますか?アクセスまたはデータ自体?おそらく少なくともAuthTypeダイジェストを使うべきです。データが機密性が高い場合は、もちろん暗号化(SSL)を追加します。クライアントは認証と暗号化のメカニズムをサポートする必要があることに注意してください。残念ながら、一部のSOAPクライアントは基本認証のみをサポートしています。 :/ –

関連する問題