2

可以就如何最好地保护暂时保持私有的 API 提出一些建议。后端 API 已经开发完毕,将位于它自己的系统上。前端消费者网站将可以通过私有 API 密钥访问此 API。这一切都在服务器端代码中。然而,一个新的要求已经公布:我们的网站也需要发出 AJAX 请求来生成代码。我不想在 javascript 代码中公开 API 调用或令牌,所以我试图找出选项。一种是在前端服务器端创建一个 REST 控制器,然后可以由 javascript 代码调用,但这会有效地规避 API 密钥安全措施,因此不是真正的解决方案。

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

这就是说 - 我目前不知道在这里做什么。

谢谢。

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

4

1 回答 1

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));
于 2013-02-14T18:45:38.947 回答