2012-03-14 15 views
15

Ben Codeigniter 1.7 kullanıyorum. Özellikle CodeIgniter çerçevesinde PHP ile web hizmetleri oluşturma deneyimi var mı? Web servislerini uygularken göz önünde bulundurulması gereken güvenlik önlemleri nelerdir? API anahtarlarıyla kimlik doğrulama nasıl sağlanabilir?Codeigniter web hizmetleri

Herhangi bir Fikir?

cevap

16

Sorguladığınız web hizmeti türüne bağlıdır. Web servisi örnek olarak bir daemon olacak mı? veya tipik bir çevrimiçi web servisi. Bunlardan herhangi biri için bir RESTful türü uygulamanız gerekir. RESTful, vatansız bir bağlantı anlamına gelir. API tuşlarının kullanıldığı yer burasıdır; Örneğin bir kullanıcıyı tanımlamak.

Neyse ki Codeigniter, birçok kitaplık ve uzantıya sahip bir tanesidir. Bu tür kitaplıkların bir örneği: https://github.com/philsturgeon/codeigniter-restserver

Artık güvenlik endişeleri için: API anahtarları oturumları veya herhangi bir durumu değiştirir. API'da tam kontroller yapmak zorunda kalacaksınız. API'leri uygulayan birçok site, aynı sonuç sonucuna farklı çözümler sunar.

API anahtarlarıyla kimlik doğrulaması kolaydır. Depolama türüne (veritabanı) karşı kontrol edersiniz.

İşte öğretici kullanarak CodeIgniter ve kütüphane önceden bağlanmış:

Bu http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/ biraz belirsiz olabilir, ancak herhangi bir belirli sorunları yok ya beri belirgin spesifik olmak zordur ihtiyacı var.

DÜZENLEME: iphone uygulaması da servis sağlayan kullanıcı işlevleri tüm kullanabilir, böylece dinlendirici bir arabirim uygulama daha iyi olacağını durumda

. En iyi yol, her şeyi tek bir yoldan erişilebilir kılmaktır. Iphone bağlantıları ve web bağlantıları için farklı kontrol cihazları/modelleri yoktur. Bu bu tür isteklerin gerçekleştirilmesi için sadece küçük bir örnektir Şimdi

<?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...; 

     } 
    } 
} 

?> 

:

Yani örneğin aşağıdaki denetleyicisi olabilir. Bu herhangi bir kontrolör tipi için geçerli olabilir. Burada birkaç seçenek olmasına rağmen. Her isteğin apikey'i ve her defasında sırrı geçmesini ve her istekte doğrulamasını sağlayabilirsiniz. Ya da bir kez beyaz listeye sahip olabilirsiniz, sonra bir kez ilk kez onaylandıktan sonra, bu istek beyaz listeye eklenir ve aksi takdirde kara listede yer alır. Bu yardımcı olur

Umut, Daniel

+0

Thanx Daniel.I've bir web application.I Web hizmetlerini kullanarak benim uygulamanın mobil uygulaması (iphone) uygulamak istiyoruz. Bana herhangi bir fikir önerebilir misin? – siva565

+0

Cevabımı güncelledi. – Daniel