Добавление функции аутентификации на мыльный сервер (используя Zend) - PullRequest
5 голосов
/ 25 июня 2009

У меня есть мыльный сервер, который создан примерно так:

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 («логин» и «пароль»), действительны.

У кого-нибудь есть предложения / помощь?

Ответы [ 3 ]

5 голосов
/ 19 апреля 2011

Чтобы добавить аутентификацию либо в Zend_Soap_Server, либо в Zend_Json_Server, просто укажите HTTP-аутентификацию либо в конфигурационном файле вашего HTTP-сервера (т.е. Apache), либо в файле .htaccess. Следующий файл .htaccess должен работать:

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

Убедитесь, что вы храните свой файл паролей вне документа в целях безопасности. Файл пароля может быть создан с помощью htpasswd, который поставляется с Apache. Естественно, вы можете использовать более сложные типы аутентификации.

Для того, чтобы использовать сервис (ы), теперь вы должны указать имя пользователя и пароль при выполнении запроса. Если вы используете 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 голос
/ 25 марта 2011
0 голосов
/ 30 сентября 2009

У меня точно такая же проблема, и у меня есть следующие мысли:

Я не знаю, является ли SOAP / должен быть полным или без сохранения состояния, можем ли мы открыть сеанс, и если пользователь предоставил какую-либо форму учетных данных, чтобы он оставался в системе в течение некоторого периода времени?

Другой способ решить эту проблему - использовать API-ключи, например, дать ключ: ABCDKEY и указать URL-адрес:

HTTP: // #### / услуги / мыло-сервер / ABCDKEY

Это создает угрозу безопасности (атака по магической ссылке), но я видел, как это реализовано в персонализированных каналах RSS и т. Д. Есть комментарии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...