Sos*_*ska 0 php authentication api rest
所以我有一个非常简单的服务提供API的想法,我知道如何在PHP中编写REST-ish API,但我所做的一切都可以自由访问.对于这个,我想通过密钥/密钥对或基本的http auth提供访问.
我不知道怎么做.
它都以某种形式通过HTTP标头工作.正常的登录过程通常使用cookie,因此Cookie: FOO=owiegwoeugiaweg会发送服务器选择的请求标头.你可以为API做同样的事情,但通常不是最好的事情.
使用某些标题字段(如Authorization标题)更好的是某种形式的授权:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)
此标头可以包含您想要的任何内容.您可以使用一些自定义密码散列/密钥交换/任何算法,并要求客户端在Authorization标头中发送此信息.如果你愿意,你也可以想出你自己的任何自定义标题.
RESTful验证请求的一种好方法是使用请求签名.该算法取决于您,但应至少包括当前时间,请求正文和用户特定密钥,它们被散列在一起以形成签名.
headers:
Date: Thu, 20 Oct 2011 04:00:48 GMT
Authorization: MySchema user123:oiquwetfp32900fjp0q93t1039
where:
Date = timestamp, must be within 15 mins of server time
Authorization = MySchema USERNAME:SIGNATURE
SIGNATURE = sha1( Date + REQUEST BODY + PASSKEY )
Run Code Online (Sandbox Code Playgroud)
这样你基本上就每个请求发送用户的密钥,但是以不可逆的方式进行加扰,对于每个请求都是唯一的,但是服务器可以通过重复相同的操作来确认(检查有效的时间戳,散列Date标头+请求正文+用户密码).过去有很好的文档可以详细解释Amazon Web Services的这个过程,但我现在找不到它.尝试研究"请求签名"以获取更多信息.
在服务器端,您可以在$_SERVER阵列中找到这些HTTP标头.您可以通过原始请求正文file_get_contents('php://input').
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |