将身份验证功能添加到soap服务器(使用Zend)?

时间:2009-06-25 19:14:32

标签: zend-framework soap

我有一个像这样创建的肥皂服务器:

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')是否为有效的。

有没有人有任何建议/帮助?

3 个答案:

答案 0 :(得分:5)

要将身份验证添加到Zend_Soap_Server或Zend_Json_Server,只需在HTTP服务器(即:Apache)配置或.htaccess文件中指定HTTP身份验证。以下.htaccess文件应该可以工作:

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

出于安全考虑,请确保将密码文件保留在docroot之外。可以使用Apache附带的htpasswd来创建密码文件。当然,您可以使用更高级的身份验证类型。

为了使用这些服务,您现在必须在发出请求时指定用户名和密码。如果您使用Zend Framework来创建客户端,则可以对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);

答案 1 :(得分:1)

答案 2 :(得分:0)

我有完全相同的问题,我有以下想法:

我不知道SOAP是/应该是状态满的还是无状态的,我们可以打开会话吗?如果用户提供了某种形式的凭证,请让她登录一段时间吗?

我想解决这个问题的另一种方法是通过API密钥,例如给出一个密钥:ABCDKEY并将网址设为:

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

这引入了安全风险(魔法链接攻击),但我已经看到它在RSS个性化提要等中实现。 有什么意见吗?