Authorization标头中的多个参数不能与Basic Auth一起使用

时间:2016-10-06 08:59:33

标签: php rest api http http-headers

我正在使用基于身份验证的基本身份验证创建基本API。 API将用于移动应用程序,并允许创建帐户,以及其他相当基本的功能。

我决定将API密钥硬编码到移动应用程序中以传递给API,使黑客更难以访问不需要登录的API部分(基本身份验证)。根据我所读到的内容,API密钥应存储在HTTP请求的Authorization标头中。

授权标题:

Key ~@3o42jf!34vm3.!

我的PHP API然后读取标题并确保密钥正确。如果是,则可以使用API​​的基本元素。

当尝试执行需要将登录传递给API的任务时,会出现问题。我的授权标题如下所示:

Key ~@3o42jf!34vm3.! Basic c3RhY2tAZ21haWwuY29tOnRlc3RpbmcxMjM=

API仍然可以读取密钥,但我现在未设置$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']访问的电子邮件/密码字符串。是通过apache_request_headers()手动阅读标题的唯一方法吗?

1 个答案:

答案 0 :(得分:1)

由于这是自定义标头,因此您应该为其使用单独的标识符。例如:

X-Api-Key: ~@3o42jf!34vm3.!

然后您可以保留基本的auth标头(因为如果您在其中插入自定义数据,它确实无法工作)。

在PHP方面,您可以使用$_SERVER['HTTP_X_API_KEY']

访问自定义标头

还要确保您的请求标头格式正确。它应该是这样的:

GET /api/v1/tickets HTTP/1.1
Host: 123.123.123.123
Authorization: Basic c3RhY2tAZ21haWwuY29tOnzzz3RpbmcxMjM=
X-Api-Key: z7='sL(=}24qv'3F
Cache-Control: no-cache
Postman-Token: e657c66f-2db1-bf76-78c5-777305b5bfe6