我正在使用 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 并确定签名请求是否有效。流程是这样的:
- 用户加入您的服务并获得用户 ID(例如 123)和 API 键。
- 用户想要向您的 API 服务发出请求以更新他们的电子邮件地址,因此他们需要向您的 API 发送请求,也许是为了
/user/update?email=new@example.com
. - 为了能够验证请求,用户在调用中添加了用户id和签名,所以调用变成了
/user/update?email=new@example.com&userid=123&sig=some_generated_string
- 服务器收到调用,发现它来自 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/