如何在rest API中传递令牌?

时间:2016-02-14 11:05:59

标签: php rest curl

我是第一次探索REST API的世界,我已经不得不通过使用Slim来处理它,但现在我想成为一个自制的解决方案,考虑到我不需要用于制作简单Rest Api的任何框架。 我所做的是创建一个这样的页面:

<?php
$method = $_SERVER['REQUEST_METHOD'];
$request = explode("/", substr(@$_SERVER['PATH_INFO'], 1));

switch ($method) 
{
  case 'PUT':
    echo "PUT";
    break;
  case 'POST':
    echo "POST";
    break;
  case 'GET':
    echo "GET";
    break;
  case 'DELETE':
    echo "DELETE";  
    break;
  default:
    handle_error($request);  
    break;
}

我的目标是实现访问令牌,我认为将其传递到标题中但我不确定(我正在寻找安全模式)。但是,如果我从命令行运行它:

curl -X GET http://localhost/v1

我得到GET,只是举例说明它应该如何运作。所有其他询问都是如此。现在真正的问题是:只有在我传递令牌时,如何调用交换机中的方法?例如,在页面顶部将执行控件将进行这样的检查:

if(!isset($_SERVER['AUTH_USER'])) 
{
    exit('TOKEN not provide');
}

另一个问题是如何通过curl传递令牌?因为如果我通过...... 我可以通过卷曲阅读标题,但它会如何工作?

更新

正如@Paradoxis所提到的,我试过:

url http://localhost/v1 -H "Authorization: <token>"

但似乎我没有拿到标题。我花时间了解标题为何没有通过,所以在我的代码中我添加了这一行:

print_r(apache_request_headers());

这就是结果:

Array 
(
   [Host] => localhost
   [User-Agent] => curl/7.46.0
   [Accept] => */*
   [Authorization] => <token>
)

我可以在request_headers中看到我在标题中可以正确看到的内容,但我无法通过使用$_SERVER['Authorization']$_SERVER['HTTP_Authorization']

来了解它

2 个答案:

答案 0 :(得分:4)

  

如何在request_headers中看到我能正确看到的   标题,但我无法通过使用来捕捉它   $ _SERVER ['授权']或$ _SERVER ['HTTP_Authorization']

每次您需要查看标题,甚至是您认为应该可用的任何其他信息时,我建议您调试它:

var_dump($_SERVER);

很可能你会发现它是:$_SERVER['HTTP_AUTHORIZATION']

注意:这是区分大小写的! Php接收标题,将键大写,将“-”更改为“_”并添加“HTTP_”。

注意2:请勿为自定义令牌使用标准http标头,例如Authorization。那是HTTP Basic Authentication。如果您确实实现了自定义令牌,请使用自定义http标头。

答案 1 :(得分:3)

您可以通过-H参数传递带curl的标头,如下所示:

curl http://localhost/v1 -H "AUTH_USER: <token>"