2013-06-25 20 views
8

すべてのページのログイン情報を必要とするシステムを構築しています。アプリケーションは、フィルスタージョンライブラリとしてcodeigniterを使用して、安らかなアプリケーションになるように設計されています。このライブラリは、APIキーを使用して、HTTPS接続を介してすべてのリクエストとともにAPIキーを送信することによってのみ許可します。REST APIログイン方法

2方向認証またはAPIキーのみを使用していても。ユーザーがusernamを入力した資格情報

  • を確認するには、ログインページにリダイレクトされます:最初の時間(https://www.xyz.com EX)の申請が

    • ユーザ要求:私はしばらく探していますと、次のシナリオです

      • APIキーが識別されるリソースとしてクライアントにサーバーによって提供されている必要があります。情報はその後、有効であれば/ HTTPS

      • Serverチェックの上にPOST経由で送信されたパスワードと、このユーザー名で(ここに質問がありますか?

      • 安全にAPIキーをクライアントに送信するにはどうすればよいですか?

        • 1)私は、これは残りのステートレス暴力的であると私はもしわからない(すべての今後の要求に、このAPIキーを使用し、その後、セッションクッキーを使用し、クッキーでAPIキーを復元でしたそれは十分に安全です)。
        • 2)実際に私はそれはあなたが

    を助けることができれば、あなたが例を与えることができれば、それは私のように大きな助けになるあなたの番です:)他のオプションを知りません見つかったとの記事

    をたくさん読んで:)

  • +0

    また、ユーザーを認証するためだけにApiキーを使用する方法を使用すると、セキュリティが十分に保護されていることがわかりました。アプリケーション内のデータが壊れているため、セキュリティが心配です – ahmedsaber111

    答えて

    8

    接続がHTTPSであるので、あなたがワイヤ上で送信何が安全な(理論的には、あなたを提供していますmitm 'd)ではありません。 API全体がHTTPS上で提供されているかどうかはわかりません(指定していない)ので、ログインの一部としてキーを返すことはできますが(HTTPSの傘下にある)、APIの残りの部分がHTTPSの場合、次の要求でキーを盗聴する可能性があります。

    セッションとCookieは、通常、RESTfulアプリケーションの一部ではありません。 RESTはステートレスです。

    HTTPS以外の場合(HTTPSでもうまくいく)、回転キーのようなものが良いでしょう。あなたはHTTPS経由でログインし、サーバーはapiキーを返し、次のリクエストでそれを使用し、サーバーは新しいapiキーを返し、次のリクエストでそれを使用します。それは非HTTPS上の単一のAPIキーよりも優れていますが、完璧ではありません。誰かが後続のリクエストの1つから応答を盗聴し、そのキーを消費しなくても、それを使用することができます。これにより、クライアントからサーバーへのリクエストがスニッフィングされた場合、正当なリクエストによってapiキーが既に消費されているため、攻撃ベクトルをサーバーからクライアントへの非HTTPSレスポンスに縮小します。ただし、HTTPS経由でAPIを提供していない場合は、APIを保護するためにさらに多くの作業を行う必要があります。

    私の場合は、+ httpsに署名するリクエストを調べます。ここで署名要求のいくつかの話があります:https://stackoverflow.com/a/8567909/183254

    クライアント

    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) 
         } 
        }) 
    } 
    
    上の擬似コードの例JS機能 http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

    APIを確保セクションで認証をダイジェストでいくつかの情報もあります


    コントローラの例:

    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); 
    } 
    
    +0

    私の最大の問題はAPIキー次のリクエストでこのapiキーを使用できるようにするために、ログイン試行に成功したユーザー – ahmedsaber111

    +0

    カレンダーメソッドを使用して例を追加しました。基本的に配列を作成し、そこに応答とapiキーをスローし、 '$ this-> response()'で返すだけです – stormdrain