如何在 rest API 中传递令牌


How to pass token in rest API?

我是第一次探索 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 传递令牌?因为如果我通过...我可以通过 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']来捕获它

你如何在request_headers中看到我可以在 标题,但我无法通过使用 $_SERVER["授权"] 或 $_SERVER["HTTP_Authorization"]

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

var_dump($_SERVER);

您很可能会发现它为:$_SERVER['HTTP_AUTHORIZATION']

注意:这区分大小写!Php获取标头,将键大写,将"-"更改为"_",并在前面加上"HTTP_"。

注意 2:不要使用标准的 http 标头,例如自定义令牌的 Authorization。这是针对 HTTP 基本身份验证的。如果确实实现了自定义令牌,请为其使用自定义 http 标头。

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

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