【发布时间】:2016-05-25 06:43:09
【问题描述】:
我第一次探索 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,只是为了举例说明它应该如何工作。对于所有其他查询也是如此。现在真正的问题是:如果我传递了一个令牌,我如何才能调用 switch 中的方法?例如,在页面顶部会执行控件会进行这样的检查:
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'] 来捕捉它
【问题讨论】:
-
投票以重复关闭。很难只选择 1 个帖子,因为这个话题在 SO 上讨论得非常频繁。表明作者缺乏研究努力。此外,“真正的问题”只出现在帖子的末尾。不相信这可以或应该被挽救。没有DOWNVOTE。
-
@tonygil 好吧,我想我的问题与您的建议略有不同,抱歉您没有理解。
-
这听起来像meta.stackexchange.com/questions/66377/what-is-the-xy-problem 你到底想做什么?因为您似乎将标准 http 身份验证与基于“自定义”令牌的身份验证(如 Oauth 或许多其他)混合在一起
-
@Gavriel 嗨,这不是 xy 问题。我想实现在每个 API 请求中传递的令牌访问。当然token是自定义的,不知道这样对不对。