2016-07-27 66 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。前端使用該端點在成功付款後創建支票。我不希望用戶使用某些其他客戶端手動創建檢查。或者我應該只是刪除這樣的端點,並將這個邏輯封裝在我的其他端點(只是防止使用單獨的端點創建檢查,而不是在支付成功後自動創建檢查)? –