如何阻止用户直接访问服务器的API,而是强制他们使用UI?

时间:2016-01-28 19:51:16

标签: api authentication http-headers httprequest

更多的理论问题,但我真的很好奇!

我有两部分申请:

  1. 托管我的UI的Apache服务器
  2. 为来自UI的所有http请求提供服务的后端
  3. apache服务代理从UI到服务器的所有http请求。因此,如果用户相当熟练,他们可以通过检查浏览器开发人员工具中的调用来对我们的API进行反向工程。

    因此,如何阻止用户直接使用服务器API,而是强制他们使用UI?

    服务器无法确定是否来自UI的呼叫,因为用户可以从UI外部调用myapp.com/apache-proxy/blah/blah/blah,apache将获取请求并将其转发到服务器,我不知道它不是来自用户界面。

    我看到的选项是从UI中向请求中注入一个标头,该标头指示请求的来源作为UI。尽管如此,这似乎已成熟。

2 个答案:

答案 0 :(得分:2)

对我来说,这更像是一个网络问题,因为它是我在网络层面解决的问题。如果在专用网络(或具有防火墙规则的公共网络)上运行后端应用程序,则可以将后端主机配置为仅接受来自Apache服务器的通信。

这样最终用户无法直接连接到API,因为公众无法访问它。只有允许的Apache服务器才能与后端API通信。这样,Apache服务器就充当了最终用户(客户端)和后端API服务器之间的中介。

AWS的示例图表。

enter image description here

答案 1 :(得分:0)

在接受来自它们的任何请求之前,您可以使后端服务器要求连接进行身份验证。然后使它只有Apache服务器才能以最终用户无法复制的方式成功进行身份验证。例如,通过在Apache和后端之间使用SSL / TLS,后端需要使用客户端证书,然后向Apache发出后端将接受的私有证书。然后,最终用户将无法直接使用后端进行身份验证。