2012-03-14 38 views
15

Tôi đang sử dụng Codeigniter 1.7. Có ai có kinh nghiệm về việc tạo ra các dịch vụ web với PHP, đặc biệt là trong khuôn khổ CodeIgniter không? Các biện pháp an ninh cần xem xét khi thực hiện các dịch vụ web là gì? Cách cung cấp xác thực bằng khóa API?Dịch vụ web Codeigniter

Bất kỳ ý tưởng nào?

Trả lời

16

Tùy thuộc vào loại dịch vụ web bạn đang truy vấn. Dịch vụ web có phải là một daemon chẳng hạn? hoặc một dịch vụ web trực tuyến điển hình. Đối với một trong hai điều này, bạn phải triển khai một kiểu RESTful. RESTful nghĩa là kết nối không trạng thái. Đây là nơi các khóa API được sử dụng; để nhận dạng người dùng chẳng hạn.

May mắn Codeigniter là một trong nhiều thư viện và tiện ích mở rộng. Ví dụ về các thư viện như vậy có thể ở đây: https://github.com/philsturgeon/codeigniter-restserver

Bây giờ vì lý do bảo mật: Khóa API sẽ thay thế phiên hoặc trạng thái bất kỳ. Bạn sẽ phải thực hiện kiểm tra đầy đủ trên api. Nhiều trang web triển khai API cung cấp các giải pháp khác nhau cho cùng một kết quả cuối cùng.

Xác thực bằng khóa API rất đơn giản. Bạn sẽ kiểm tra nó dựa vào một loại lưu trữ (cơ sở dữ liệu).

Đây là một hướng dẫn sử dụng CodeIgniter và thư viện liên kết trước đó: http://net.tutsplus.com/tutorials/php/working-with-restful-services-in-codeigniter-2/

Điều này có thể hơi mơ hồ, nhưng kể từ khi bạn không có bất kỳ vấn đề cụ thể hoặc rõ ràng cần cứng của nó sẽ được cụ thể.

EDIT:

Trong trường hợp đó nó sẽ tốt hơn thực hiện một giao diện RESTful để ứng dụng iphone của bạn cũng có thể sử dụng tất cả các chức năng sử dụng dịch vụ mà bạn cung cấp. Cách tốt nhất là làm cho mọi thứ có thể truy cập được theo một cách. Có nghĩa là không có bộ điều khiển/mô hình khác nhau cho kết nối iphone và kết nối web.

Vì vậy, ví dụ bạn có thể có bộ điều khiển sau:

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

     } 
    } 
} 

?> 

Bây giờ đây chỉ là một ví dụ nhỏ để thực hiện các loại yêu cầu. Điều này có thể áp dụng cho bất kỳ loại bộ điều khiển nào. Mặc dù có một vài tùy chọn ở đây. Bạn có thể thực hiện mọi yêu cầu chuyển apikey và bí mật mỗi lần và xác minh nó theo từng yêu cầu. Hoặc bạn có thể có một số loại danh sách trắng mà một khi bạn đã được xác minh lần đầu tiên, mỗi yêu cầu sau đó sẽ được đưa vào danh sách trắng và màu đen được liệt kê ở phía đối diện.

Hope this helps, Daniel

+0

Thanx Daniel.I've một web application.I muốn thực hiện ứng dụng di động (iphone) cho ứng dụng của tôi bằng cách sử dụng các dịch vụ Web. Vì vậy, bạn có thể gợi ý cho tôi bất kỳ ý tưởng nào không? – siva565

+0

Đã cập nhật câu trả lời của tôi. – Daniel