2012-03-14 3 views
15

저는 Codeigniter 1.7을 사용하고 있습니다. 누구나 CodeIgniter 프레임 워크에서 PHP로 웹 서비스를 만드는 경험이 있습니까? 웹 서비스를 구현할 때 고려해야 할 보안 조치는 무엇입니까? API 키로 인증을 제공하는 방법?Codeigniter 웹 서비스

어떤 아이디어?

답변

16

당신이 문의하는 웹 서비스의 종류에 따라 다릅니다. 예를 들어 웹 서비스가 데몬이 될 것입니까? 또는 전형적인 온라인 웹 서비스. 이 중 하나의 경우 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/ 다소 모호 할 수도 있지만, 어떤 특정 문제가 그나마 나 때문에 겉보기로 하드를 필요로한다.

편집 : 아이폰 응용 프로그램은 또한 당신의 서비스가 제공하는 사용자 기능을 모두 사용할 수 있도록이 편안한 인터페이스를 구현 좋을 것이다이 경우

. 가장 좋은 방법은 모든 것을 한 방향으로 접근 가능하게 만드는 것입니다. 아이폰 연결과 웹 연결에 다른 컨트롤러/모델이 없다는 것을 의미합니다. 이 요청의 이러한 유형을 수행하기위한 단지 작은 예를 들어 지금

<?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 하나의 웹 application.I 웹 서비스를 사용하여 내 애플 리케이션을위한 모바일 앱 (아이폰)를 구현하고자합니다. 그래서 나에게 어떤 아이디어라도 제안 할 수 있니? – siva565

+0

내 대답이 업데이트되었습니다. – Daniel