微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从后端发出 HTTP 请求并从外部发出安全 API 密钥?

如何解决从后端发出 HTTP 请求并从外部发出安全 API 密钥?

我有一个从 API 获取数据的简单网站。因此我必须使用 API 密钥。最初我所做的是使用 async 函数fetch() 从前端使用 vanilla js 调用 API。但我发现,如果我通过访问开发人员工具 --> 网络从前端调用 API,任何人都可以看到我的 API 密钥。

因此,我所做的是使用 fetchData.PHP 进行 API 调用获取数据。在我的 App.js 中,我正在向该 fetchData.PHP 文件发出 AJAX 请求。

Q1) 那么这是保护我的 API 密钥的好方法吗?因为我没有从前端进行 API 调用

Q2) 我是否应该做更多的事情来保护我的 API 密钥?

Q3) 这也是开发人员如何用 vanilla js 做这样的事情的方式吗?

App.js

var oXHR = new XMLHttpRequest();  
oXHR.open("GET","fetchData.PHP",true);  
oXHR.onload = function(evt)
{
  const movies = JSON.parse(oXHR.responseText);
  movies.results.forEach(movie => {
    console.log(movie);
  })
}
oXHR.onerror = function(evt)
{
  alert("Error!");
}
oXHR.send();

fetchData.PHP

<?PHP 

$API_KEY = '7013---------------------';
$imgBaseURL = 'http://image.tmdb.org/t/p/original';
$fetch_URL = "https://api.themoviedb.org/3/trending/all/week?api_key=$API_KEY";
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$fetch_URL);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$movies_json = curl_exec($ch);
echo $movies_json;

?>

任何指导都是最有帮助的。谢谢!!!

解决方法

首先,您只能在后端使用 API 密钥(在您的情况下为 PHP),然后它在网络选项卡中将不可见。

保护 API 的方法有很多,您可以使用 JWT 对有效用户进行身份验证并允许他们使用这些 API。

或者您可以将后端置于 API 网关之后,并根据需要配置网关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。