我开发了一个jQuery插件,它显示了从安全的RESTful API获取的一些数据。 API由基本身份验证和令牌保护。为了不泄漏基本身份验证凭据和创建令牌的逻辑,我将它们移动到一个基本上看起来像这样的proxy.php:
$url = "http://the-api.com/path";
$context = stream_context_create(
array(
'http' => array(
'header' =>
"Authorization:Basic " . base64_encode("$username:$password") . "\r\n" .
)
)
);
$response = file_get_contents($url, false, $context);
header("content-type: application/json");
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400');
header("Access-Control-Allow-Methods: GET, OPTIONS");
header('Access-Control-Allow-Headers: X-Requested-With, Origin, Content-Type, Authorization');
return $response;
它使用必要的凭据转发请求并返回API的响应。到现在为止还挺好。凭据不在Javascript代码中。 但是,其他人可以通过调用proxy.php来执行相同的请求。 如何验证只有jQuery插件可以成功调用proxy.php?可以通过cookie和令牌的组合来完成吗? proxy.php与jQuery插件位于同一主机/域上。
答案 0 :(得分:0)
如何验证只有jQuery插件可以成功调用proxy.php?
你不能。
你试图限制它的任何事情最终都归结为"浏览器发出HTTP请求"。该HTTP请求的所有细节都可供浏览器用户使用(注意:浏览器适用于用户,不适用于网站)。用户可以复制这些细节并随意使用它们。
可以通过cookie和令牌的组合来完成吗?
没有。可以复制cookie和令牌,因为它们对浏览器和用户都是可见的。