MrF*_*Foh 29 php rest codeigniter api-key
我正在使用phil sturgeon REST_Controller为codeigniter创建一个REST api,到目前为止我已经能够创建一个简单的库来为用户生成api密钥.我的问题是现在为每个请求发送api密钥到API,如何在不必为每个请求手动发送它的情况下执行此操作.
zom*_*bat 53
您应该查看请求签名.一个很好的例子是亚马逊的S3 REST API.
概述实际上非常简单.用户有两个重要的信息来使用您的API,一个公共用户ID和一个私有API密钥.他们使用请求发送公共ID,并使用私钥对请求进行签名.接收服务器查找用户的密钥并确定签名的请求是否有效.流程是这样的:
/user/update?email=new@example.com./user/update?email=new@example.com&userid=123&sig=some_generated_string此方法确保API密钥永远不会作为通信的一部分发送.
看一下PHP的hash_hmac()函数,它在发送签名请求时非常流行.通常,您可以让用户执行类似操作,例如将所有参数放入数组中,按字母顺序排序,连接成字符串,然后连接hash_hmac该字符串以获取sig.在这个例子中你可能会这样做:
$sig = hash_hmac("sha256",$params['email'].$params['userid'],$API_KEY)
Run Code Online (Sandbox Code Playgroud)
然后将其添加$sig到REST URL上,如上所述.
REST的想法是它是无状态的 - 所以没有会话或任何东西.如果你想进行身份验证,那么这就是密钥进入的地方,必须为每个请求传递密钥,并且每个请求都会对用户进行身份验证(因为REST是无状态的,我提到过吗?).
您可以通过各种方式传递密钥.您可以将其作为参数传递(即http://example.com/api/resource/id?key=api_key),也可以将其作为HTTP标头的一部分传递.我见过API指定您发送用户名,API密钥作为HTTP基本访问授权标头的密码部分.
一个示例请求:
<?php
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'http://example.com/api/resource/id',
CURLOPT_USERPWD => 'martinbean:4eefab4111b2a'
));
$response = curl_exec($ch);
Run Code Online (Sandbox Code Playgroud)
凡martinbean将在您的网站我的帐户的用户名,并且4eefab4111b2a将是我的API密钥.
| 归档时间: |
|
| 查看次数: |
41986 次 |
| 最近记录: |