簡體   English   中英

保護將由不同客戶端訪問的 REST API

[英]Securing REST API that will be accessed by diffrent clients

我開發了一個 REST/JSON API。 API 公開了許多功能。 API 將由我們內部設計的應用程序(移動應用程序和 Web 應用程序)、我們的經銷商設計的應用程序和企業設計的應用程序使用。 我正在考慮通過實施身份驗證和授權來保護應用程序。 我已經“谷歌”了很多,但我的研究給我留下的問題多於答案。

我們的內部應用程序將由在應用程序上注冊的最終用戶使用。 從本質上講,我們的應用程序只是一個客戶端,接收來自最終用戶的請求,將其帶到 REST API 並為最終用戶檢索數據。 我們的內部應用程序應該能夠執行 REST API 公開的所有操作。 在我們的內部應用程序上處理用戶登錄的最佳方式是什么? 基於 SSL 或 OAuth 的 HTTP Basic?

我們的經銷商應用程序可以像擁有用戶一樣創建用戶,但最終用戶詳細信息會存儲在我們的數據庫中。 轉銷商應用程序將僅充當客戶端,接收用戶的請求並獲取用戶數據。 我們的經銷商應用程序應僅限於 REST API 的某些操作。 我將使用什么安全機制來實現這種授權和用戶登錄?

我希望我的問題很清楚。 謝謝您的幫助。

根據我在閱讀本文時的理解,您的問題有兩個部分:

我的 API 的最佳身份驗證方法是什么?

我最近為一個 API 開發了一個身份驗證系統,該系統以 OAuth 為模型,但沒有每個規范。 該系統與亞馬遜用於其 API 的系統基本相同。 [本文] 如果您想要一個安全的 API 身份驗證模型而不必使用 OAuth,那么1非常有用。

該模型使用以下原則:

  • 身份驗證數據將隨每個請求傳遞到 API 服務器
  • 請求將包含生成時的 Unix 時間戳
  • 整個請求(包括時間戳)將生成一個 HMAC 哈希值,並與其余數據一起發送。 散列是使用只有 API 服務器和 API 客戶端知道的私鑰生成的。
  • API 獲取數據(包括時間戳),使用該用戶的私鑰(由用戶 ID、用戶名、公共 API 密鑰等標識)生成 HMAC 哈希,並將其與隨請求發送的哈希進行比較。 如果此操作成功,則繼續進行常規身份驗證並處理請求。 注意: API 將檢查時間戳並將其與自己的時間戳進行比較,以確保請求發生在有效的時間范圍內,例如 30 秒、5 分鍾、10 分鍾等。

當然,您也可以使用 SSL/HTTPS 上的常規 HTTP 身份驗證,但我發現這種方式非常好,因為您無需實現OAuth協議的各個方面即可實現高級別的安全性。

您如何進行身份驗證基本上取決於您。 我更喜歡使用值得信賴的大型組織(例如亞馬遜)采用的方法。 我個人不想像 Twitter、Facebook 等那樣完全使用 OAuth。

我應該如何允許不同的用戶訪問我的 API 中的不同端點?

您的 API 服務器中應該有一個內部映射,其中包含允許或拒絕特定 API 帳戶訪問某些端點的記錄。 在我的 API 服務器中,我決定默認情況下所有端點都為“允許”,並且我將指定哪些帳戶無法訪問某些端點。

您還可以設置不同的組或類型的 API 訪問帳戶,這些帳戶可以具有這樣的組權限。


我的建議是 [閱讀這篇文章] 2兩遍或三遍,然后再讀一遍。 然后,實施其中建議的方法。

就個人而言,我認為確保盡可能多的安全性的最佳方法是將與請求有關的所有內容絕對限制在定義的一組邊界內,例如,我希望端點只能由 GET HTTP 請求訪問(所有其他 HTTP 方法會拋出錯誤),每個帳戶每天最多 3 次,在向服務器請求的 30 秒時間范圍內,只允許返回小范圍的數據等。

限制 HTTP 方法對於降低您的 API 做不該做的事情的風險非常重要,尤其是對於 RESTful API,因為端點可用於根據請求方法做多種事情。 您甚至可以為每個 API 帳戶設置權限以限制每個端點上的某些方法,例如 API 用戶 xxx 可以從端點獲取信息但不能 POST、PUT、PATCH 等,或者 API 用戶 xxx2 可以 POST 數據但不能獲取任何信息等.

[編輯] 1 和 2:www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/(沒有完全刪除鏈接,但保持 url 未鏈接,因為它不再有效/重定向到隨機站點)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM