繁体   English   中英

Codeigniter REST API标头和身份验证

[英]Codeigniter REST API headers & authentication

我正在使用Phil Sturgeon的REST控制器来构建API。 使用API​​密钥执行API身份验证。 目前,在数据库的api_keys表中仅定义了一个密钥,我已经设置了我的客户端,可以通过以下cURL请求使用此密钥访问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问题,但我们无法深入了解它。

有人知道为什么会这样吗?

提前致谢。

为其他可能遇到相同问题的人找到了问题。 Apache 2.4.x现在强制将标头更严格地转换为环境变量,以减轻通过标头注入带来的某些跨站点脚本攻击。 看到:

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

“包含无效字符(包括下划线)的标题现在已被静默删除。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM