2009-06-25 8 views
5

나는 이렇게 만들어진 비누 서버가 있습니다 :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에 제공된 자격 증명을 확인합니다. options 배열 ('login'및 'password')이 유효합니다.

아무도 어떤 제안/도움이 있습니까?

답변

0

나는 정확히 같은 문제를 가지고 나는 다음과 같은 생각을 가지고,

SOAP 인 경우 I는 국가 전체 또는 비 저장해야/모르는를 우리가 세션을 열 수 있고, 사용자가 어떤 형태를 제공 한 경우 그녀는 일정 기간 동안 로그인 상태를 유지합니까? ABCDKEY과 같은 URL을 갖는 :

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

이 보안 위험을 소개합니다 (마법의 링크

나는이 문제를 해결 생각하고 다른 방법은 API-키를 통해, 예를 들어 키를주는 말 공격)하지만 RSS 개인화 된 피드 등에서 구현 된 것을 보았습니다. 의견이 있으십니까?

+0

왜 바퀴를 다시 발명은 클라이언트를 만드는 젠드 프레임 워크를 사용하는 경우 SOAP에 대해 다음과 같은 작업을 수행 할 수 있습니까? HTTP 인증은 이유가 있습니다. –

5

단순히 하나 HTTP 서버 (아파치 IE)에서 HTTP 인증을 지정 Zend_Soap_Server 또는 Zend_Json_Server 중 하나에 인증을 추가하려면. 다음 .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에 대해 다음 :

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

확실히 이것은 아주 기본적인 수준의 보호만을 제공합니다. SSL이나 ws-security를 ​​살펴볼 가치가 있다고 생각하십니까? –

+0

내 대답은 "당연히 더 고급 인증 유형을 사용할 수 있습니다"제안했습니다. 인증 및 암호화가 관련 될 수 있습니다. 그러나 그들은 같은 것이 아닙니다. 무엇을 보호하고 싶습니까? 액세스 또는 데이터 자체? 적어도 AuthType Digest를 사용해야합니다. 데이터가 민감한 경우 암호화 (SSL)를 추가하십시오. 클라이언트가 인증 및 암호화 메커니즘을 지원해야한다는 점에 유의하십시오. 불행히도 일부 SOAP 클라이언트는 기본 인증 만 지원합니다. : / –