2016-06-20 234 views
0

我將爲我的客戶端創建一個API服務以供使用。 api會返回一些數據,這些數據將會顯示給使用我客戶網站的客戶。 api不需要任何種類的用戶數據。使用node.js進行api身份驗證

我想使用api鍵並使用它返回相關數據。但我想確保只有使用我的客戶網站的客戶才能訪問api。

我的問題是,如果我在前端使用api並暴露api密鑰,任何人都可以從他們的瀏覽器使用api。我不希望這種情況發生。我如何認證?如果這不起作用,我可以使用從我的服務器到客戶端服務器的API?即使那麼我將如何驗證服務器?

我使用nodejs並在後端表達。有任何想法嗎?謝謝!

回答

0

如果您的API是公共的,沒有用戶身份驗證,則無法限制對其的訪問。
有很多解決方法,比如檢查引用者或創建特殊標記,但它們都將存儲在客戶端,並且一個malefactor可以重用它。

這一切都沒有意義的一般。您已經將您的API暴露給您的客戶。即使你創建了一個工作算法,一個罪犯可以簡單地運行你的網站JavaScript方法來使其工作。你想要保護什麼?

如果您限制對API的訪問,那麼最合適和有效的方法是將此API作爲後端,以便只有您的服務器端的Web客戶端才能訪問它。

+0

謝謝!這就說得通了。即使我在客戶端製作api後端,您是否知道如何驗證請求來自正確的服務器?我知道我們並沒有公開API密鑰,只是爲了確保。 – prdtuty

+0

@prdtuty如果您使用服務器端方法,並且您的服務器位於某種內部網絡中,那麼您可以簡單地應用默認限制規則,如IP過濾,路由,證書:)通常,IP過濾就足夠了 - 您有Web客戶端192.168.0.1,並且您有後端API 192.168.0.2,它只有單個端口(例如80),僅適用於192.168.0.1。 –

+0

請求服務器不在內部。你認爲我需要在這種情況下啓用CORS嗎? – prdtuty

1

這是一件棘手的事情;基本上限制了公共API。在一天結束時,網頁將在其本地機器上的用戶瀏覽器中。因此,如果他們可以從瀏覽器訪問它,那麼他們也可以手動訪問它們。一個API密鑰確實是最好的方法,但這只是比訪問控制更具威懾力。不幸的是,幾乎任何你放入瀏覽器的訪問控制類型都可以在瀏覽器之外被模仿。

如果你想在一定程度上讓用戶登錄的路線,你應該看看json web tokens (jwt)。這不需要在用戶級別上,如果您願意,可以在某種會話級別上。但是,這不會限制用戶直接訪問apis。

相關問題