2017-03-09 144 views
-1

我正在用Java開發一個REST API使用Jersey以及保護它的最佳方式是什麼?我從基於密碼的身份驗證,Servlet Context,我聽說了關於標記化等等的各種事情。但是,通過在瀏覽器中輸入網址,只需在POST之間調用PostMan等等,保護它的行業標準方式是什麼,並確保沒有人能通過GET請求獲取數據?任何有關實施這種最佳方式的學習資料?保護REST API的最佳方式是什麼?

在簡單的英語中,我問的是,如何確保API僅適用於我們的應用程序,從而如何保護我的REST API?做它的方法可以是從密碼到令牌的任何事情。我現在正在學習它,試圖實施它,但在我需要知道該學什麼之前,因爲我正在尋找最佳實踐和行業標準方法。

+0

這是很不清楚你的問題是什麼。使用哪種形式的令牌(JWT,UUID,...)?使用哪種形式的令牌:標頭,cookie或參數?如何在Jersey中實現身份驗證/授權?或者是什麼? – user3707125

+0

@ user3707125:我在問怎麼才能保證我的REST API通過確保API只能訪問我們的應用程序。做到這一點的方法可以是你提到的任何事情。我現在正在學習它,試圖實現它,但在我需要知道要學什麼之前。 –

+0

「API僅適用於我們的應用程序」 - 這是不可能的,因爲客戶端可以監視與服務器的通信並模仿它。在網絡中,您通常需要了解前端是另一個應用程序,然後在考慮安全性時記住應用程序不屬於您的應用程序。 – user3707125

回答

2

這裏是開始,以確保您的API相當不錯的地方:

  1. 使用HTTPS進行身份驗證
  2. 使用用戶名/密碼
  3. 當用戶成功登錄,你爲他們生成
  4. 令牌
  5. 將令牌分配給該用戶(簡單的方法是將其存儲在數據庫中)
  6. 要求用戶發送該令牌以滿足每個請求
  7. 在迴應任何請求之前驗證令牌

這就是說有一些擔憂。您應該研究如何實現這些目標:

  • 將證書以加密的形式存儲在數據庫中,以防數據庫受損。

  • 如果您將令牌存儲在數據庫中,驗證需要進行數據庫查找,這是否會成爲問題,您是否期待重負載?

  • 如果您使用無狀態身份驗證,例如JWT,那麼如果您需要,如何撤銷訪問。 (提示:查看訪問+刷新令牌方案+黑名單)

  • 您如何運輸您的令牌,標題,cookie?

  • 保護您的API免受跨站點腳本(又名.XSS)和跨站請求僞造(又名CSRF或XSRF)的攻擊。

注意:這些都只是一些簡單的想法從我的頭頂,你可以找到很多關於這些在線信息。

+0

謝謝。我是谷歌搜索,它說oAuth2是最好的?也許它會盡我們所說的一切? –

+0

OAuth2不是很友好,但是,如果你可以實現它,那是好事。您可以查看諸如Auth0或Stormpath之類的解決方案。 –

+0

你的解釋非常清楚。我有幾個問題。 1.通過「使用用戶名/密碼進行身份驗證」,您的意思是允許用戶使用他的憑據登錄到應用程序?像FB用戶通過rypomg用戶名登錄Facebook,密碼? –

相關問題