2012-03-14 25 views
15

Używam Codeigniter 1.7. Czy ktokolwiek ma doświadczenie w tworzeniu serwisów WWW z PHP, szczególnie w ramach CodeIgniter? Jakie środki bezpieczeństwa należy wziąć pod uwagę podczas wdrażania usług internetowych? Jak zapewnić uwierzytelnianie za pomocą kluczy API?Usługi sieciowe Codeigniter

Jakieś pomysły?

Odpowiedz

16

To zależy od rodzaju usługi internetowej, o którą pytasz. Czy serwis internetowy będzie na przykład demonem? lub typowy internetowy serwis internetowy. W przypadku każdej z nich należy wdrożyć typ RESTful. RESTful oznacza połączenie bezpaństwowe. Tutaj są używane klucze API; aby zidentyfikować użytkownika na przykład.

Na szczęście Codeigniter jest jednym z wieloma bibliotekami i rozszerzeniami. Przykład takich bibliotek może być tutaj: https://github.com/philsturgeon/codeigniter-restserver

Teraz ze względów bezpieczeństwa: klucze API zastąpią sesje lub stan. Będziesz musiał wykonać pełną kontrolę interfejsu API. Wiele witryn, które implementują interfejsy API, oferuje różne rozwiązania z takim samym wynikiem końcowym.

Uwierzytelnianie za pomocą kluczy API jest proste. Sprawdziłbyś to w odniesieniu do typu magazynu (bazy danych).

Oto poradnik użyciu CodeIgniter i biblioteki powiązane poprzednio: http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

To może być nieco niejasne, ale skoro nie masz żadnych konkretnych problemów lub pozorna potrzebuje jej trudno być konkretne.

EDIT:

W takim przypadku lepiej byłoby wdrożenie relaksującego interfejsu tak, że aplikacja iPhone może również korzystać ze wszystkich funkcjonalności użytkowników, że usługa zapewnia. Najlepszym sposobem byłoby uczynienie wszystkiego dostępnym w jeden sposób. Oznacza to, że nie ma różnych kontrolerów/modeli dla połączeń iphone i połączeń internetowych.

Tak na przykład można mieć następującą Kontroler:

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

     } 
    } 
} 

?> 

Teraz jest to tylko mały przykład do wykonywania tego typu wniosków. Może to dotyczyć dowolnego typu kontrolera. Chociaż istnieje kilka opcji tutaj. Możesz kazać każdemu zleceniu przekazać apikey i sekret za każdym razem i zweryfikować to na każde żądanie. Lub możesz mieć coś w rodzaju białej listy, która po weryfikacji zostanie sprawdzona po raz pierwszy, gdy każda prośba zostanie dodana do białej listy lub czarna na liście przeciwnej.

Nadzieja to pomaga, Daniel

+0

Niż Daniel.I've jeden internetowej application.I chcą wdrożyć aplikację mobilną (iPhone) do mojej aplikacji za pomocą usług internetowych. Czy możesz sugerować mi jakieś pomysły? – siva565

+0

Zaktualizowałem moją odpowiedź. – Daniel

Powiązane problemy