2012-03-14 6 views
15

私はCodeigniter 1.7を使用しています。誰も、特にCodeIgniterフレームワーク内でPHPを使ってWebサービスを作成した経験がありますか? Webサービスを実装する際に考慮する必要のあるセキュリティ対策は何ですか? APIキーによる認証の仕方Codeigniterウェブサービス

すべてのアイデア?

答えて

16

これは、お問い合わせしているウェブサービスの種類によって異なります。 Webサービスはデーモンになりますか?または典型的なオンラインWebサービスです。いずれの場合も、RESTful型を実装する必要があります。 RESTfulはステートレスな接続を意味します。これは、APIキーが使用される場所です。例えばユーザを識別する。

幸いにもCodeigniterは多くのライブラリと拡張機能を持つものです。このようなライブラリの例は次のとおりです。https://github.com/philsturgeon/codeigniter-restserver

セキュリティ上の懸念から、APIキーはセッションまたは任意の状態を置き換えます。あなたはAPIを完全にチェックする必要があります。 APIを実装する多くのサイトでは、同じ最終結果に対してさまざまなソリューションを提供しています。

APIキーによる認証は簡単です。ストレージタイプ(データベース)に対してチェックします。ここで

はCodeIgniterのを使用してチュートリアルと以前にリンクされたライブラリです:http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

これは多少曖昧かもしれませんが、あなたは、任意の特定の問題や明白なニーズの特定であることがそのハードを持っていけないからです。

EDIT:あなたのiPhoneのアプリはまたあなたのサービスが提供するユーザーの機能をすべて使用できるように、それはRESTfulなインターフェースを実装する方が良いだろうその場合

。最善の方法は、すべてを一方的にアクセス可能にすることです。 iphone接続とWeb接続のコントローラ/モデルが異なるわけではありません。これは、リクエストの種類を実行するためのほんの一例である今

<?php 

class Auth extends CI_Controller{ 

    public function login(){ 
     //Check if their accessing using a RESTful interface; 
     $restful = $this->rest->check(); 
     if($restful){ 
     //Check for the API keys; 
     $apiKey = $this->input->get('apiKey'); 
     $secretKey = $this->input->get('secretKey'); 

     //If you have any rules apon the keys you may check it (i.e. their lengths,     
     //character restrictions, etc...) 
     if(strlen($apiKey) == 10 and strlen($secretKey) == 14) 
     { 
      //Now check against the database if the keys are acceptable; 
      $this->db->where('apiKey', $apiKey); 
      $this->db->where('secretKey', $secretKey); 
      $this->db->limit(1); 
      $query = $this->db->get('keys'); 
      if($this->db->count_all_results() == 1) 
      { 
      //It's accepted the keys now authenticate the user; 
      foreach ($query->result() as $row) 
      { 
       $user_id = $row->user_id; 
       //Now generate a response key; 
       $response_key = $this->somemodel->response_key($user_id); 
       //Now return the response key; 
       die(json_encode( array(
             'response_key' => $response_key, 
             'user_id' => $user_id 
            ) 
           ) 
        ); 

      } //End of Foreach 
      }//End of Result Count 
     }//End of length/character check; 
     } else { 
     //Perform your usual session login here...; 

     } 
    } 
} 

?> 

だから、たとえば次のようなコントローラーを持つことができます。これはどのタイプのコントローラーにも当てはまります。ここにはいくつかのオプションがありますが。すべてのリクエストがapikeyと秘密を毎回渡し、リクエストごとに確認することができます。または、ホワイトリストのいくつかの並べ替えをすることができます一度最初に検証された後、それぞれの要求はホワイトリスト、または黒反対に記載されます。このことができます

希望、 ダニエル

+0

ありがとうDaniel.I've 1ウェブapplication.Iは、Webサービスを使用して私のアプリのためのモバイルアプリ(iphone)を実装します。だから私は何かアイデアを提案することができますか? – siva565

+0

私の答えを更新しました。 – Daniel