2016-07-27 40 views
2

我正在开发提供REST API的Spring Boot Web应用程序。我的大多数页面(thymeleaf模板)都使用此API与后端进行通信(使用AJAX请求)。我已阅读了诸如基本认证,OAuth2等不同方法。这些方法描述了用户认证,之后用户可以访问API。但我不希望用户使用浏览器或REST客户端(即邮递员Chrome浏览器扩展程序,可访问浏览器Cookie,通常存储访问令牌)直接与我的API进行通信。

我有这样的:
(1)User - >(2)MyOwnPages - >(3)RestAPI。

有没有办法阻止直接通信1-3?
我可以以某种方式确定请求是从我的页面创建的(即向每个请求添加某种访问令牌)?有没有最佳做法?

谢谢!如何仅允许自己的页面访问API?

+0

这是DMZ的用途(https://en.wikipedia.org/wiki/DMZ_(computing))。在你的情况下,你需要两个带有防火墙的应用程序:一个在DMZ中间充当中介,另一个在后端。 – vtosh

回答

1

不,这是完全不可能的。你可以添加令牌来让它变得更加困难,在Javascript中生成东西等等,但是所有这些都会让你的页面变得更慢并且更容易崩溃。

的流动不是:

(1) User --> (2) MyOwnPages --> (3) RestAPI. 

反倒是:

(1) User --> (2) Users Browser --> (3) RestAPI. 

而且由于它是一个的进行调用于API的浏览器,没有合理的方式来告诉之间的区别, cURL,Postman等。任何你可以做的事情,用户都可以用Wireshark这样的方式来确切地知道发送的内容,并且从中可以做任何浏览器正在做的事情。

更准确地理解你为什么要这样做会更有帮助,因为无论你的最终目标是什么,都可能有更好的解决方案。

+0

感谢您的回复!我的目标是防止用户做坏事。假设我有下一个端点:POST ../api/checks。前端使用该端点在成功付款后创建支票。我不希望用户使用某些其他客户端手动创建检查。或者我应该只是删除这样的端点,并将这个逻辑封装在我的其他端点(只是防止使用单独的端点创建检查,而不是在支付成功后自动创建检查)? –

相关问题