由於連接是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