2014-01-21 2 views
0

Я использую REST Controller от Phil Sturgeon для создания API. Проверка API выполняется с помощью ключей API. В настоящее время существует только один ключ, указанный в таблице api_keys в базе данных и получить доступ к API, используя этот ключ с помощью следующей Curl просьбы моего клиента я настройка:Codeigniter REST API-заголовки и аутентификация

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $uri); 
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); 
curl_setopt($ch, CURLOPT_MAXREDIRS, 1); 
curl_setopt($ch, CURLOPT_HEADER, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_TIMEOUT, 45); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/html; charset=utf-8', 
    'Accept: application/html', 
    'X_API_PREFIX: ' . $this->apiPrefix(), 
    'X_API_KEY: ' . $this->apiKey(), 
    "User-Agent: ShowHouse/" . ShowhouseClient::API_CLIENT_VERSION . '; PHP ' . phpversion() . ' [' . php_uname('s') . ']'; 
    'Accept-Language: ' . $this->_acceptLanguage 
)); 
    curl_setopt($ch, CURLOPT_USERPWD, $this->apiKey()); 

    if ('POST' == $method) 
    { 
     curl_setopt($ch, CURLOPT_POST, TRUE); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    } 
    else if ('PUT' == $method) 
    { 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    } 
    else if('GET' != $method) 
    { 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); 
    } 

    $response = curl_exec($ch); 

Однако я получаю неверный ключ API ответ обратно с сервера API. Проблема, кажется, что на следующей строке в REST_Controller.php:

if (($key = isset($this->_args[$api_key_variable]) ? $this->_args[$api_key_variable] : $this->input->server($key_name))) 

как

$this->_args[$api_key_variable] 

и

$this->input->server($key_name) 

не на самом деле множество. 3 из нас в офисе имеют точно такой же код, проверенный из репозитория управления версиями, с той лишь разницей, что у нас двоих есть Apache 2.4.4, а у другого - Apache 2.2.24. Оба из нас, работающих под управлением 2.4.4, продолжают получать неверную ошибку API-ключа, но все это отлично работает для парня с 2.2.24, который предположил бы, что это проблема Apache, но мы просто не можем понять ее.

Какие-либо идеи, почему это происходит так?

Заранее спасибо.

ответ

1

Обнаружена проблема для всех, у кого может быть такая же проблема. Теперь Apache 2.4.x обеспечивает более строгий перевод заголовка в переменные окружения, чтобы смягчить некоторые атаки с использованием межсайтового скриптинга посредством вставки заголовков. См:

http://httpd.apache.org/docs/trunk/new_features_2_4.html

"Заголовки, содержащие недопустимые символы (в том числе подчеркивания) теперь отброшены."