我有一个像这样创建的肥皂服务器:
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 :(得分: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个性化提要等中实现。 有什么意见吗?