如何在Rest API中传递令牌?

Dil*_*ger 5 php rest curl

我是第一次探索REST API的世界,我已经不得不通过使用Slim来解决它,但是考虑到我不需要任何框架来制作一个REST API,现在我想成为一个自制的解决方案。简单的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;
}
Run Code Online (Sandbox Code Playgroud)

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

curl -X GET http://localhost/v1
Run Code Online (Sandbox Code Playgroud)

我得到了GET,只是为了举例说明它应该如何工作。其他所有查询也是如此。现在真正的问题是:仅当我传递令牌时,如何才能在交换机中调用方法?例如,将在页面顶部执行控制,将执行以下检查:

if(!isset($_SERVER['AUTH_USER'])) 
{
    exit('TOKEN not provide');
}
Run Code Online (Sandbox Code Playgroud)

另一个问题是如何通过curl传递令牌?因为如果通过...完成操作,我可以通过curl读取标题,但是它将如何工作?

更新:

如@Paradoxis所述,我尝试过:

url http://localhost/v1 -H "Authorization: <token>"
Run Code Online (Sandbox Code Playgroud)

但似乎我没有带头。我花时间了解为什么不传递标题,因此在我的代码中添加了以下行:

print_r(apache_request_headers());
Run Code Online (Sandbox Code Playgroud)

结果是:

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

你怎么能在看到request_headers我可以在头部正确地看到,但我无法抓住它通过使用$_SERVER['Authorization']$_SERVER['HTTP_Authorization']

Gav*_*iel 6

您如何在request_headers中看到我可以在标题中正确看到,但是通过使用$ _SERVER ['Authorization']或$ _SERVER ['HTTP_Authorization']无法捕获它

每当您需要查看标题或什至您认为应该可用的任何其他信息时,建议您像这样调试它:

var_dump($_SERVER);
Run Code Online (Sandbox Code Playgroud)

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

注意:这是区分大小写的!Php获取标头,大写密钥,将“ -” 更改为“ _”并添加“ HTTP_”。

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