我正在使用基于身份验证的基本身份验证创建基本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()
手动阅读标题的唯一方法吗?
答案 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