php - 如何在 rest API 中传递 token ?

标签 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;
}

我的目标是实现一个访问 token ,我想在 header 中传递它,但我不确定(我正在寻找安全模式)。但是,如果我从命令行运行它:

curl -X GET http://localhost/v1

我得到 GET,只是为了举例说明它应该如何工作。所有其他查询也是如此。现在真正的问题是:只有当我传递了一个 token 时,我怎样才能调用 switch 中的方法?比如在页面顶部会进行控件会进行这样的检查:

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

另一个问题是如何通过curl传递token?因为如果我通过... 我可以通过 curl 读取 header ,但它是如何工作的?

更新:

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

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

但我似乎没能接受标题。我花时间了解为什么未传递 header ,因此在我的代码中添加了这一行:

print_r(apache_request_headers());

这是结果:

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

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

最佳答案

How you can see in the request_headers I can see correctly in the header, but I can't catch it through the use of $_SERVER['Authorization'] or $_SERVER['HTTP_Authorization']

每次您需要查看 header ,或者您认为应该可用的任何其他信息时,我建议您这样调试它:

var_dump($_SERVER);

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

注意:这里区分大小写! Php 获取 header ,将 key 大写,将“-”更改为“_”并添加“HTTP_”。

注意 2:不要为您的自定义 token 使用标准的 http header ,例如 Authorization。那是为了 HTTP Basic Authentication .如果您确实实现了自定义 token ,请为其使用自定义的 http header 。

关于php - 如何在 rest API 中传递 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35391016/

相关文章:

php - 用户 "Symfony\Component\Security\Core\User\User"没有用户提供者

PHP/SQL 无法在 while 循环后使用来自查询的数据

php - 输出自定义错误消息而不是默认的 php 错误消息

使用 Jersey 的 Java Async REST Web 服务?

PHP Curl 和 setcookie 问题

android - 使用 cURL 调用 Firebase Cloud Messaging 时出现 "Request had invalid authentication credentials"

php - 选择部分但不是全部子节点

http - 在 RESTful Web 服务中使用选项

rest - 如何将 API 参数传递给 GCP 云构建触发器

git - 在 PowerShell 中将 curl REST 调用转换为 Invoke-RestMethod