Codeigniter веб-сервисов - PullRequest
       2

Codeigniter веб-сервисов

16 голосов
/ 14 марта 2012

Я использую Codeigniter 1.7. У кого-нибудь есть опыт создания веб-сервисов с PHP, особенно в рамках CodeIgniter? Какие меры безопасности необходимо учитывать при внедрении веб-сервисов? Как обеспечить аутентификацию с помощью ключей API?

Есть идеи?

1 Ответ

16 голосов
/ 14 марта 2012

Это зависит от того, какой веб-сервис вы запрашиваете. Например, будет ли веб-служба демоном? или типичный онлайн-сервис. Для любого из них вы должны реализовать тип 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/

Это может быть несколько расплывчато, но поскольку у вас нет особых проблем или явных потребностей, трудно быть конкретным.

РЕДАКТИРОВАТЬ:

В этом случае было бы лучше реализовать интерфейс RESTful, чтобы ваше приложение для iphone также могло использовать все пользовательские функции, предоставляемые вашей службой. Лучшим способом было бы сделать все доступным одним способом. Это означает, что у вас нет разных контроллеров / моделей для соединений iphone и веб-соединений.

Так, например, у вас может быть следующий контроллер:

<?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 и секрет каждый раз и проверял его при каждом запросе. Или у вас может быть какой-то белый список, который после первой проверки каждого запроса после этого будет добавлен в белый список, или черный список будет указан напротив.

Надеюсь, это поможет, Daniel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...