首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将api密钥传递给rest api

将api密钥传递给rest api
EN

Stack Overflow用户
提问于 2011-12-20 05:01:16
回答 2查看 47K关注 0票数 29

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-20 05:39:17

你应该研究一下请求签名。Amazon's S3 REST API就是一个很好的例子。

概述实际上是相当简单的。用户有两个重要的信息来使用你的API,一个公开的用户id和一个私有的API密钥。它们将公共id与请求一起发送,并使用私钥对请求进行签名。接收服务器查找用户的密钥,并决定签名的请求是否有效。流程是这样的:

  1. 用户加入您的服务,并获得用户id (例如123)和API密钥。

API用户想要向您的API服务发出请求以更新其电子邮件地址,因此他们需要向您的API发送请求,可能是向

  1. 发送请求,以便能够验证请求。用户将用户id和

签名添加到调用中,这样调用就变成了API服务器接收调用,看到它来自userid=123,并查找该用户的API密钥。然后,它重复从数据创建签名的步骤,如果签名匹配,则该请求是有效的。

这种方法确保应用程序接口密钥永远不会作为通信的一部分发送。

看看PHP的hash_hmac()函数,它在发送签名请求时很流行。通常,您会让用户执行一些操作,例如将所有参数放入一个数组中,按字母顺序排序,连接成一个字符串,然后对该字符串执行hash_hmac操作以获得符号。在此示例中,您可以执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
$sig = hash_hmac("sha256",$params['email'].$params['userid'],$API_KEY)

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

票数 54
EN

Stack Overflow用户

发布于 2011-12-20 05:24:26

REST的思想是它是无状态的-所以没有会话或任何东西。如果您想进行身份验证,那么就需要使用密钥,并且必须为每个请求传递密钥,并且每个请求都对用户进行身份验证(因为REST是无状态的,我有提到过吗?)

您可以通过多种方式传递密钥。您可以将其作为参数(即http://example.com/api/resource/id?key=api_key)传递,也可以将其作为HTTP头的一部分进行传递。我见过指定您发送用户名的API,以及作为HTTP basic access authorization头的密码部分的API密钥。

请求示例:

代码语言:javascript
代码运行次数:0
运行
复制
<?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);

其中API是我在您网站上的帐户用户名,4eefab4111b2a是我的martinbean密钥。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8567512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档