由于连接是HTTPS,任何你寄过来的电线是安全的(理论上和提供您不是mitm'd)。不确定整个API是否通过HTTPS提供(您没有指定),因此即使您可以将密钥作为登录的一部分返回(仍处于HTTPS的保护范围内),但如果api的其余部分不是HTTPS,关键可能会在下一个请求中被嗅探。
会话和cookie通常不是RESTful应用程序的一部分; REST是无状态的。
类似于旋转键的东西对于非HTTPS会更好(也可以与HTTPS一起使用)。您通过HTTPS登录,服务器返回api密钥,您在下一个请求中使用它,服务器返回新的api密钥,您在下一个请求中使用它,依此类推。虽然它比单个非HTTPS API更好,但它并不完美。如果有人嗅探其中一个后续请求的响应,并且最终没有使用该密钥,则可以使用该密钥。这将攻击向量缩小为从服务器到客户端的非HTTPS响应,因为如果从客户端到服务器的请求被嗅探,api密钥已经被您的合法请求占用。但是,如果您未通过HTTPS提供服务,则应该采取更多措施来保护api。
如果是我,我会考虑请求签名+ https。有要求签名的一些谈话这里:https://stackoverflow.com/a/8567909/183254
也有上消化在AUTH确保API http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/
的伪代码示例js函数的部分在客户端上的一些信息
function get_calendar(){
var key = $('#api_key').value();
$.ajax({
type: 'get',
url: '/index.php/api/calendar?key=' + key,
success: function(response){
// show calendar
// ...
// set received api key in hidden field with id api_key
$('#api_key').value(response.api_key)
}
})
}
示例控制器方法:
function calendar_get($api_key = ''){
if($api_key_matches){//verify incoming api key
$r = array();
$r['calendar'] = $this->some_model->get_calendar();
$r['api_key'] = $this->_generate_api_key();// generate or get api key
}
$this->response($r);
}
如果我使用的方法只使用Api密钥来验证用户是安全的,我担心安全,因为应用程序内的数据是敏感的 – ahmedsaber111