У меня есть два приложения cakePHP на двух разных серверах. Для получения данных из первого требуется одно приложение; Мне удалось установить архитектуру Restful, но мне не удалось выполнить процедуру аутентификации для запросов, отправляемых сервером. Мне нужно пройти аутентификацию для защиты данных. Я смотрел в Интернете, но, похоже, не мог заставить его работать. Может ли кто-нибудь указать мне на ресурс/учебник, который подробно объясняет это. То, что мне в конечном итоге понадобится, будет способом аутентификации моего сервера каждый раз, когда он отправит запрос другому серверу. Любая помощь будет оценена по достоинству.Аутентифицировать Restake cakePHP 2.3
ответ
Наконец-то я получил его для работы после некоторых исследований; действительно, одним из решений является 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
http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html – bancer
Используйте Oauth. Вы найдете множество обучающих программ в Интернете при поиске этого ключевого слова. – burzum