验证Restful cakePHP 2.3

验证Restful cakePHP 2.3,php,rest,cakephp,cakephp-2.3,restful-authentication,Php,Rest,Cakephp,Cakephp 2.3,Restful Authentication,我在两个不同的服务器上有两个cakePHP应用程序。需要一个应用程序才能从第一个应用程序获取数据;我已经成功地将Restful体系结构放在适当的位置,但未能对服务器发送的请求实现身份验证过程。我需要进行身份验证以保护数据。我已经在网上四处查看了一下,但似乎无法让它正常工作。有人能给我指一下详细解释这一点的资源/教程吗。 我最终需要的是一种在每次服务器向另一台服务器发送请求时对其进行身份验证的方法。任何帮助都将不胜感激 经过一番研究,我终于让它开始工作了;事实上,解决方案之一是OAuth。如果您面

我在两个不同的服务器上有两个cakePHP应用程序。需要一个应用程序才能从第一个应用程序获取数据;我已经成功地将Restful体系结构放在适当的位置,但未能对服务器发送的请求实现身份验证过程。我需要进行身份验证以保护数据。我已经在网上四处查看了一下,但似乎无法让它正常工作。有人能给我指一下详细解释这一点的资源/教程吗。
我最终需要的是一种在每次服务器向另一台服务器发送请求时对其进行身份验证的方法。任何帮助都将不胜感激

经过一番研究,我终于让它开始工作了;事实上,解决方案之一是OAuth。如果您面临同样的问题,我可以建议您使用CakePHP。 我所做的详细工作是将OAuth插件放入我的API服务器中,并将其用于我的restful控制器:

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;
}
这假设您已经按照中的说明设置了客户端(将xxxx替换为客户端凭据的实际值)。一旦我有了访问令牌,我所要做的就是按如下方式使用它:

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以理解协议(特别是部分),通过使用


使用Oauth。当你搜索关键词时,你会在网上找到很多教程。