2014-12-01 2 views
1

У меня есть два приложения cakePHP на двух разных серверах. Для получения данных из первого требуется одно приложение; Мне удалось установить архитектуру Restful, но мне не удалось выполнить процедуру аутентификации для запросов, отправляемых сервером. Мне нужно пройти аутентификацию для защиты данных. Я смотрел в Интернете, но, похоже, не мог заставить его работать. Может ли кто-нибудь указать мне на ресурс/учебник, который подробно объясняет это. То, что мне в конечном итоге понадобится, будет способом аутентификации моего сервера каждый раз, когда он отправит запрос другому серверу. Любая помощь будет оценена по достоинству.Аутентифицировать Restake cakePHP 2.3

+0

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html – bancer

+0

Используйте Oauth. Вы найдете множество обучающих программ в Интернете при поиске этого ключевого слова. – burzum

ответ

1

Наконец-то я получил его для работы после некоторых исследований; действительно, одним из решений является OAuth. Если вы столкнулись с одной и той же проблемой, я могу вам посоветовать this Plugin, сделанный для CakePHP. В деталях, что я был поставлен на OAuth плагин в мой API сервер, и я использовал его как и для моего успокоительного контроллера:

class RestObjectController extends AppController { 
public $components = array('RequestHandler', 'OAuth.OAuth'); 
public $layout = FALSE; 

public function token() { 
    $this->autoRender = false; 
    try { 
     $this->OAuth->grantAccessToken(); 
    } catch (OAuth2ServerException $e) { 
     $e->sendHttpResponse(); 
    } 
} 
public function index() { 
    $objects = $this->Object->find('all'); 
    $this->set(array(
     'objects' => $objects, 
     '_serialize' => array('objects') 
    )); 
} 

Функцией RestObject.token() является то, что я назвал бы получить маркер доступа который будет использоваться для предоставления мне доступа к ресурсам в моем контроллере. (Заметим, что, объявив OAuth в моих компонентах контроллера, все ресурсы в моем контроллере будут доступны для доступа к токену доступа). Так на клиентском сервере я хотел бы получить маркер доступа следующим образом:

public function acquireAccessToken(){ 
    $this->autoRender = FALSE; 
    App::uses('HttpSocket', 'Network/Http'); 
    $link = API_SERVER."rest_objects/token"; 
    $data = array(
      'grant_type' => 'client_credentials', 
      'client_id' => 'xxxx', 
      'client_secret' => 'xxxx' 
    ); 
    $response = $httpSocket->post($link, $data); 
    if($response->code == 200){ 
     $data = json_decode($response->body, true); 
     return $data['access_token']; 
    } 
    return FALSE; 
} 

Это предполагает, что у вас есть клиенты уже настроили, как описаны в Plugin Doc (заменить хххй реальные значения для учетных данных клиента) , Как только у меня будет свой токен доступа, все, что мне нужно сделать, это использовать его следующим образом:

public function test(){ 
    $this->layout = FALSE; 
    App::uses('HttpSocket', 'Network/Http'); 
    $httpSocket = new HttpSocket(); 
    if($access_token = $this->acquireAccessToken()){ 
      $link = API_SERVER."rest_objects.json"; //For the index as e.g. 
      $data = array('access_token' => $access_token); 
      $response = $httpSocket->get($link, $data); 
    } 
} 

И вот у вас оно есть! Так начните с чтения OAuth Specification понимать протокол (в частности Obtaining Authorization часть), см какой протокол (может отличаться от той, которую я использовал) относится и адаптироваться к делу с помощью Plugin

Tutorial Here