2013-05-14 92 views
2

我想保護使用Spring MVC開發的REST API。REST驗證 - 數字簽名?

在谷歌搜索我碰到這個link

這是最好的方法嗎?它使用數字證書嗎?或數字證書僅用於基於SOAP的Web服務?

另請指出,是否有更好的REST驗證替代方案。

回答

-1

你可以模擬這樣的公鑰/私鑰驗證

你需要兩個基本的東西!

  1. 用戶ID /應用ID(要檢查該應用程序被允許訪問該應用程序)(私鑰)

  2. 用於API的隨機密鑰(以檢查該方法允許用於再認證應用)

REST服務(服務器端)將所有的應用程序允許的記錄通過「應用程序ID」

現在你可以在你自己的算法中使用這兩個鍵。例如,你可以創建一個簡單的HASH。

這種情況下,您正在用公鑰(You API隨機密鑰)加密您的API。 正在調用該方法的客戶端正在使用其私鑰解密(應用程序ID)

當客戶端發送他的應用程序ID時,您可以從其應用程序ID和API隨機密鑰中生成HASH,並使其確保這個應用程序被允許調用這個方法。

的這裏優點是:1。 服務器端可以更改加密算法,客戶不必擔心

  1. 服務器可以改變方法加密(公鑰),其客戶端不用擔心

  2. 客戶端不能更改私鑰(應用程序ID)。如果他改變了,服務器會拒絕它。在其他的方式,非註冊的應用程序不能訪問REST服務

1

這是最好的方法?

什麼是「最佳」取決於您的要求。這種方法的好處是

  • 相當容易,只要訪問密鑰保持祕密實施
  • 沒有明顯的漏洞。

不是很好:

  • 雙方都知道的祕密訪問密鑰,所以你作爲一個用戶必須信任REST服務使您的訪問密鑰的祕密的提供者。在大多數情況下,這可能不是一個很大的限制,但仍...

是否使用數字證書?

沒有。沒有涉及證書。除了可能用於將祕密訪問密鑰提供給您的SSL連接之外。

或數字證書只用於基於SOAP的Web服務?

不正確。對於REST,您可以使用https(SSL),通常涉及由服務器提供證書以驗證自己。您也可以對其進行配置,以便客戶端必須使用SSL對證書進行身份驗證。這將是一個很好的解決方案,但在客戶端實現起來相當棘手。這不是火箭科學,但是閱讀和理解證書以及私鑰和公鑰的處理可能會很棘手。您還需要一些可信的根CA,這需要很多工作來設置,或者如果您使用其中一個已建立的CA,則使用起來會相當昂貴。當我在爲一家大公司的內部服務工作時,我會考慮這種方法。他們經常擁有這種基礎設施。

另請指出,是否有更好的REST驗證替代方案。

如上所述:對於大多數服務來說,這是一個很好的方法。使用帶有客戶端證書的PKI將是另一種選擇,在某些情況下更好。

+0

非常感謝Jens Schauder和@madhairsilence 對於我們的應用程序,我們有用戶名/密碼(例如admin/admin123)存儲在數據庫中。 如何爲上述生成訪問密鑰和祕密訪問密鑰。 有沒有什麼標準? 一旦生成,我將這兩個保存在數據庫中。 亞馬遜有類似下面, 訪問密鑰 - AIKAIKHMZWU7UQL3L43A 訪問密鑰 - 6lhqyE32gQscsfacqbJ3KIoujqzZeYSwbsdasdw – Jay 2013-05-15 09:34:43

+0

決不密碼存儲在數據庫中!存儲哈希代碼。您可以並且應該使用隨機數字生成器創建API密鑰。由於這將被放在應用程序中,它不一定很容易記憶或任何東西。 – 2013-05-15 10:53:24