Javascript - 保护API密钥

时间:2018-02-06 20:38:46

标签: javascript reactjs api csrf

我知道这是一个非常常见的问题,并且已经写了很多关于它的内容。尽管在网上阅读了很多内容,但我无法找到合适的解决方案。

我有一个完全公开的网站 - 没有登录/安全区域。整个站点由各种第三方网站的API调用提供支持。该网站在前端使用React。 React需要进行API调用才能为网站提供支持。

问题是,保护API密钥。

天真的解决方案1。

React使API调用直接指向第三方API - 类似于https://api.someservice.com/endpoint?key=API-KEY

显然这不好,因为它暴露了API-KEY。

解决方案2。

每个人都建议在您自己的服务器上创建服务,并从那里向第三方进行API调用。这样您就不必公开API-KEY。所以React打电话给https://api.myserver.com/endpoint

然后,此服务将调用第三方服务,并返回结果。问题是,其他人可以只调用托管在我服务器上的端点,并使用它 - 有效地使用我的API-KEY。

所以,问题是,我怎样才能确保我(我的React应用程序)是唯一可以调用我服务器上托管的API服务的人?

----使用其他信息进行修改.----

基本上会显示覆盖信息的地图。当用户滚动地图时,API调用是异步进行的,并且与显示位置相关的信息被叠加到地图上。当用户导航地图时,没有输入形式,没有提交,只是不断的异步API调用流。

我需要保护这些API调用。没有任何表格提交或登录/身份验证。该网站向所有人开放。

1 个答案:

答案 0 :(得分:0)

我遇到了与您相同的问题,而我计划做的是将dotnet核心与SPA和服务器端渲染结合使用。就我而言,我使用的是Angular,但他们已经准备好使用模板进行反应并做出反应+还原。

通过这种组合,您的反应应用程序将在您的MVC应用程序内运行。这意味着您可以拥有一个只接受来自localhost的请求的代理API(记住您有SSR),并且可以从该API控制器调用另一个API。你的密钥是安全的,因为它们只能由你的C#控制器使用,这是你的中间人。实际的信息交换将在服务器之间完成

Source