使用AJAX从我自己的消费者网站安全访问私有API

时间:2013-02-14 18:35:40

标签: ajax api security backend frontend

可以使用一些建议来确保如何最好地保护暂时保密的API。后端API已经开发出来并将位于自己的系统上。前端消费者网站将通过私有API密钥访问此API。这都是服务器端代码。但是,已经知道了一个新要求:我们的网站还需要发出AJAX请求来生成代码。我不想在javascript代码中公开API调用或令牌,所以我想弄清楚选项。一种方法是在前端服务器端创建一个REST控制器,然后可以通过javascript代码调用,但这样可以有效地规避API密钥安全措施,因此不是真正的解决方案。

那么一般做法是什么?我认为理想情况(我正朝着这个方向发展,目前在时间上并不可行)我会使用OAuth令牌来验证请求并进行一些API调用(提取一般信息)不需要任何形式的身份验证等,甚至鉴于AJAX要求,这会产生一些问题。有没有办法让客户端javascript和相关的AJAX调用保持安全?

所有这一切都是 - 我目前无法在这里做什么。

感谢。

编辑:当前的想法是在前端创建控制器,可以通过ajax访问,ajax将非危险的提取发送到API,而风险的控制器依赖于当前的用户验证(例如用户登录)。此外,登录将不是AJAX样式请求,因此登录应该是可靠的安全测试。

1 个答案:

答案 0 :(得分:0)

您可以开发一个处理程序来接受AJAX请求,并使用您在非公开代码中的其他位置采用的常规访问令牌方法将它们传递给私有API。

这样,您就不会在javascript中公开令牌或API。您可以在处理程序中构建API调用的白名单,以便它只处理来自前端的(可能是)良性AJAX请求。此处理程序既是针对错误请求的防火墙,也是保护私有API的真实机制的方法。

如果任何API方法对数据具有潜在危险或破坏性,则可以(并且应该)与公共网站的身份验证机制一起使用。

一个模型(在PHP中):

$whitelist = array(
  'SomeApiCallPublicAlias'=>'RealApiMethod',
  'AnotherPublicAlias'=>'SomeSafeApiMethod'
);
$call = $_POST['call']; // <-- SomeApiCallPublicAlias
if (!array_key_exists($call, $whitelist))
  die('permission denied');
$data= $_POST['data'];

// hook in to the private API, pass the data, return the response
$response = make_private_api_call($whitelist[$call], $data);
die(json_encode($response));
相关问题