我正在使用Codeigniter rest server和firebase php-jwt创建RESTful服务。创建了一个API来返回operator的列表。客户端要访问这个API,必须在headers中发送令牌。示例请求如下:
GET /index.php/operators/prepaid HTTP/1.1
Host: testing.mydomain.in
Authorization: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6IjExNTIxNCIsImlhdCI6MTUxNzk4MjU1NywiZXhwIjoxNTE4MDAwNTU3fQ.PZYh3OlSsKGo_ihPPSm7RrU5BbTNaeTN1fKlNcOZ2r4
Cache-Control: no-cache
Postman-Token: 933f3b1d-7934-d30a-11bf-f80f3912f433
控制器代码:
use \Firebase\JWT\JWT;
class Operators extends REST_Controller
{
private $_payload;
public function __construct($config = 'rest')
{
parent::__construct($config);
$token = $this->input->get_request_header('Authorization');
if(!$token) {
$output = array("Error" => "Access Denied");
$this->response($output, REST_Controller::HTTP_UNAUTHORIZED);
}
try {
$this->_payload = JWT::decode($token, $this->config->item('jwt_secret_key'),array('HS256'));
} catch (Exception $ex) {
$output = array("Error" => $ex->getMessage());
$this->response($output, REST_Controller::HTTP_UNAUTHORIZED);
}
$this->load->model('Operators_Data');
}
public function prepaid_get()
{
$operators = $this->Operators_Data->getOperatorsByService(1);
$this->response($operators);
}
}
我得到了以下结果。
{
"Error": "Access Denied"
}
如果令牌不存在,则从控制器构造函数返回。但我在头部授权中发送了令牌。
这在我的本地主机上运行正常(它返回操作员列表)。但是当我尝试从测试服务器上运行时,它总是返回“拒绝访问”。
更新:非常确定服务器正在忽略“Authorization”标头。
也尝试过
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
.htaccess中的设置
非常感谢任何帮助。