我知道这是一个非常常见的问题,并且已经写了很多关于它的内容。尽管在网上阅读了很多内容,但我无法找到合适的解决方案。
我有一个完全公开的网站 - 没有登录/安全区域。整个站点由各种第三方网站的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调用。没有任何表格提交或登录/身份验证。该网站向所有人开放。
答案 0 :(得分:0)
我遇到了与您相同的问题,而我计划做的是将dotnet核心与SPA和服务器端渲染结合使用。就我而言,我使用的是Angular,但他们已经准备好使用模板进行反应并做出反应+还原。
通过这种组合,您的反应应用程序将在您的MVC应用程序内运行。这意味着您可以拥有一个只接受来自localhost的请求的代理API(记住您有SSR),并且可以从该API控制器调用另一个API。你的密钥是安全的,因为它们只能由你的C#控制器使用,这是你的中间人。实际的信息交换将在服务器之间完成
(Source)