在REST API代理,extJS和Chef中使用身份验证标头

时间:2016-09-28 17:09:51

标签: rest api authentication extjs chef

我正在尝试向Chef服务器上的端点发出API GET请求,并想知道如何使用我的用户名和username.pem文件来成功发出请求。我目前正在使用extJS框架来执行此操作。

我有一个非常类似的应用程序:

REST Proxy Example

我希望将GET请求的结果显示在网格中。

Chef Server API GET Cookbooks

使用REST API测试网站(REST API testing),我已经能够使用以下代码发出简单请求:

var listOfCookbooks = Ext.create('Ext.data.Store', {
autoLoad: true,
autoSync: true,
model: 'Optional Cookbooks',
proxy: {
    type: 'rest',
    url: 'http://jsonplaceholder.typicode.com/posts',
    reader: {
        type: 'json',
        rootProperty: 'data'
    },
    writer: {
        type: 'json'
    }
},
listeners: {
    write: function(store, operation) {
        var record = operation.getRecords()[0],
            name = Ext.String.capitalize(operation.action),
            verb;
    }
}
});

以前,我一直在使用PHP包装器来调用Chef Server API,这允许我设置我的用户名和username.pem文件:

<?php

use Guzzle\Http\Client;
use LeaseWeb\ChefGuzzle\Plugin\ChefAuth\ChefAuthPlugin;

// Supply your client name and location of the private key.
$chefAuthPlugin = new ChefAuthPlugin("my-dashboard", "my-dashboard.pem");

// Create a new guzzle client
$client = new Client('https://manage.opscode.com'); 
$client->addSubscriber($chefAuthPlugin);

// Now you can make calls to the chef server
$response = $client->get('/organizations/my-organization/nodes')->send();

$nodes = $response->json();

?>

由于

1 个答案:

答案 0 :(得分:0)

当你说extJS我假设你正在谈论从浏览器这样做。建议不要这样做,因为您必须将整个RSA私钥加载到不安全的Javascript中,因为您无法合理地确保它不会泄漏到其他上下文。您需要某种代理(例如您提到的PHP代码),它使用更传统的浏览器会话身份验证方法,如cookie。总的来说,这将是非常困难和烦人的,我建议你缩小你需要的范围。