接続は HTTPS であるため、ネットワーク経由で送信するものはすべて安全です (理論上、また、攻撃を受けていなければ)。API全体がHTTPS経由で提供されているかどうか(指定しなかった)がわからないため、ログインの一部としてキーを返すことができても(まだHTTPSの傘下にあります)、残りのAPIがそうでない場合HTTPS の場合、キーは次のリクエストで傍受される可能性があります。
通常、セッションと Cookie は RESTful アプリケーションの一部ではありません。REST はステートレスです。
HTTPS 以外の場合は、リボルビング キーのようなものが適しています (HTTPS でも機能します)。HTTPS経由でログインすると、サーバーがAPIキーを返し、次のリクエストでそれを使用し、サーバーが新しいAPIキーを返し、次のリクエストでそれを使用します。HTTPS 以外の単一の API キーよりは優れていますが、完全ではありません。誰かが後続のリクエストの 1 つからのレスポンスを傍受し、あなたがそのキーを最終的に消費しない場合、彼らはそれを使用できます。クライアントからサーバーへのリクエストが傍受された場合、API キーは正当なリクエストによって既に消費されているため、これにより攻撃ベクトルがサーバーからクライアントへの非 HTTPS 応答に縮小されます。ただし、HTTPS 経由で提供していない場合は、API を保護するためにさらに多くのことを行う必要があります。
私だったら、リクエスト署名 + https を調べます。ここにリクエスト署名の話があります: https://stackoverflow.com/a/8567909/183254
http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/のSecuring the APIセクションには、ダイジェスト認証に関する情報もあります。
クライアント上の 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);
}