如何通过PHP代理安全地使用Javascript访问受保护的API?

时间:2017-05-19 16:19:03

标签: javascript api security authentication

我开发了一个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插件位于同一主机/域上。

1 个答案:

答案 0 :(得分:0)

  

如何验证只有jQuery插件可以成功调用proxy.php?

你不能。

你试图限制它的任何事情最终都归结为"浏览器发出HTTP请求"。该HTTP请求的所有细节都可供浏览器用户使用(注意:浏览器适用于用户,不适用于网站)。用户可以复制这些细节并随意使用它们。

  

可以通过cookie和令牌的组合来完成吗?

没有。可以复制cookie和令牌,因为它们对浏览器和用户都是可见的。