php - 将 api key 传递给 rest api

标签 php codeigniter rest api-key

我正在使用 phil sturgeon REST_Controller 为 codeigniter 创建一个 REST api,到目前为止,我已经能够创建一个简单的库来为用户生成 api key 。 我现在的问题是为每个请求将 api key 发送到 API,我如何做到这一点而不必为每个请求手动发送它。

最佳答案

您应该查看请求签名。一个很好的例子是Amazon's S3 REST API .

概述实际上非常简单。用户有两个重要的信息可以使用您的 API,一个公共(public)用户 ID 和一个私有(private) API key 。他们将公共(public) ID 与请求一起发送,并使用私钥对请求进行签名。接收服务器查找用户的 key 并确定签名请求是否有效。流程是这样的:

  1. 用户加入您的服务并获得用户 ID(例如 123)和 API 键。
  2. 用户想要向您的 API 服务发出请求以更新他们的电子邮件地址,因此他们需要向您的 API 发送请求,也许是为了 /user/update?email=new@example.com.
  3. 为了能够验证请求,用户在调用中添加了用户id和签名,所以调用变成了 /user/update?email=new@example.com&userid=123&sig=some_generated_string
  4. 服务器收到调用,发现它来自 userid=123,并查找该用户的 API key 。然后它复制从数据创建签名的步骤,如果签名匹配,则 请求有效。

此方法可确保 API key 永远不会作为通信的一部分发送

看看 PHP 的 hash_hmac()功能,它在发送签名请求时很受欢迎。通常,您会让用户执行一些操作,例如将所有参数放入数组中,按字母顺序排序,连接成字符串,然后 hash_hmac 该字符串以获取 sig。在此示例中,您可能会这样做:

$sig = hash_hmac("sha256",$params['email'].$params['userid'],$API_KEY)

然后如上所述将 $sig 添加到 REST url 中。

关于php - 将 api key 传递给 rest api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567512/

相关文章:

php - Android登录注册时响应不包含任何数据

php - 将 $_POST 关联数组插入数据库 PHP

java - Azure 存储服务 REST API : Create Container

java - 如何为客户端过滤器调用扩展 ClientRequestFilter 的类

javascript - 使用地理定位选择 REST 服务器

php - 获取 Twitter 个人资料图片实际链接

php - 在 PHP 中从多个 ID 获取具有单个 ID 的所有记录

php - 如何修复我的表单未将数据更新到数据库的问题 [Codeigniter]

php - 代码点火器 + HMVC + REST

javascript - 我如何使用 CodeIgniter 和 jquery 调用 SQL 查询并将其加载到 DATATABLE 插件?