Почему может некорректно отрабатывать http аутентификация на сервере для soap сервиса?

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Почему может некорректно отрабатывать http аутентификация на сервере для soap сервиса?

Сообщение EVOSandru6 »

Добрый день,

Выполнил построение wsdl структуры, без авторизации все отрабатывается, хочу воткнуть простейшую http авторизацию:

Код: Выделить всё

class SoapWebServiceAction extends CWebServiceAction
{
   public function run()
    {
        header('Content-Type: text/xml; charset=utf-8');

        $username = '123';
        $passwd = '123';

        header('X-HEADER : ' . $_SERVER['PHP_AUTH_USER'] . ':' .$_SERVER['PHP_AUTH_PW']);

        if (!isset($_SERVER['PHP_AUTH_USER'])) {
            header('WWW-Authenticate: Basic realm="My Realm"');
            header('HTTP/1.0 401 Unauthorized: ' . $_SERVER['PHP_AUTH_USER'] . ':' .$_SERVER['PHP_AUTH_PW']);
            echo "Вы должны ввести корректный логин и пароль для получения доступа к ресурсу";
            exit;
        } else {
             if ($username == $_SERVER['PHP_AUTH_USER'] && $passwd == $_SERVER['PHP_AUTH_PW']) {
                parent::run();
            }
            else {
                throw new Exception($_SERVER['PHP_AUTH_USER'] . ':' .$_SERVER['PHP_AUTH_PW']);
            }
        }
    }
...
}

1. Проверяю через программу soapui. Ввожу адрес сервиса, ввожу данные доступа, получаю список методов с шаблоном для запроса.
2. Для запросов также для каждого метода вводить данные авторизации. Сделал.

Если ввожу неправильные данные - 99, 888, то ловлю ожидаемо:

99:888 из блока:

Код: Выделить всё

throw new Exception($_SERVER['PHP_AUTH_USER'] . ':' .$_SERVER['PHP_AUTH_PW']);
Тут все понятно, авторизационные данные не верны, но если я ввожу правильные (123, 123) данные, то ловлю ('' - пустоты):

HTTP/1.0 401 '' : ''

Как будто бы я не отправлял данных авторизации.

Подскажите - почему такое может быть?
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Почему может некорректно отрабатывать http аутентификация на сервере для soap сервиса?

Сообщение EVOSandru6 »

Вместо
parent::run();
Написал
var_dump('+');die;

Теперь я попадаю в плюсик, но как быть с отображением, куда можно воткнуть авторизацию? В beforeAction пробовал, ситуация такая же как и в run():

Код: Выделить всё

public function beforeAction($action)
    {
        parent::beforeAction($action);

         if (!isset($_SERVER['PHP_AUTH_USER'])) {
             header('WWW-Authenticate: Basic realm="My Realm"');
             header('HTTP/1.0 401_1 U_Unauthorized');
             echo "Вы должны ввести корректный логин и пароль для получения доступа к ресурсу";
             exit;
         } else {
             if (SoapAuth::AUTH_USERNAME === $_SERVER['PHP_AUTH_USER'] && SoapAuth::AUTH_PASSWORD === $_SERVER['PHP_AUTH_PW']) {
                 return true;
             }
             else {
                 // throw new Exception($_SERVER['PHP_AUTH_USER'] . ':' .$_SERVER['PHP_AUTH_PW']);
                 return false;
             }
         }
    }
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

Re: Почему может некорректно отрабатывать http аутентификация на сервере для soap сервиса?

Сообщение EVOSandru6 »

Думаю, мне нужно что-то вроде:

Yii::app()->onBeforeRequest = function($event) {

LogHelper::log('start');

return ob_start("ob_gzhandler");
};

Но ругается, что onBeforeRequest свойство не определено.
Ответить