2010-12-20 49 views
0

對於我目前的側項目,這是一個模塊化的網絡管理系統(其中可能包含了數據庫管理,內容管理系統,項目管理,資源管理,實時跟蹤,等等模塊),我要揭露整個系統作爲RESTful API,因爲我認爲這會使系統更加可用。本身是要系統在ASP.MET MVC3進行編碼但是如果我讓所有的數據/可通過一個RESTful API的行爲,應該使系統很容易與PHP和Ruby,Python和等使用......(他們甚至可以如果他們想要,可以有自己的界面來管理某些數據)。保護一個RESTful API

然而,有一兩件事似乎很難做到容易(從用戶的使用的角度的RESTful API點)與一個RESTful API與Ajax功能的安全性。如果我想要設置和使用很複雜的東西,我只需創建SOAP服務,但使用RESTful API的整個驅動器非常簡單。使用與用戶關聯的密鑰保護RESTful API的最常見方式。當所有的調用都在服務器端完成時,這可以正常工作,但是一旦開始執行ajax功能,即發生更改。我希望RESTful API能夠直接從JavaScript調用,但是任何螢火蟲的人都可以輕易地訪問用戶正在使用的密鑰,允許該人訪問系統。有沒有一種更好的方式來保證RESTful API的安全,它不會讓RESTful API的用戶執行復雜的事情來設置它?

+0

請參閱[REST身份驗證和公開API密鑰](http://stackoverflow.com/questions/5472668/rest-authentication-and-exposing-the-api-key)。 – Arjan 2012-12-15 09:46:37

回答

0

一件事,你不能阻止你的API的用戶不會暴露他的關鍵。

但是,如果您正在爲您的API編寫客戶端,我會建議您使用服務器端對API執行任何請求,而HTML頁面則提供用戶的數據。如果您絕對必須使用Javascript來調用API,並且您仍然有一個服務器端來填充所涉及的頁面,那麼您可以通過單向摘要算法以時間戳相關的方式遮蔽實際的密鑰,同時生成頁面,並讓你的API也以時間依賴的方式檢查摘要。

另外,我建議你看看到OAuth的隨機數,更深入地時間戳一點。 Twitter和其他API提供商顯然也有這個問題,所以他們必須用Nonce值做些事情。

+0

我知道我不能阻止用戶公開他們的密鑰,我希望能夠嘗試爲服務器和客戶端提供一種向API發出請求的方式。我將更仔細地研究摘要訪問認證。 – ryanzec 2010-12-20 17:00:39

0

有可能做出一些簽名從JavaScript請求。但我很確定,RESTfull'urls如何與這個額外的信息。而且你也有同樣的問題:任何人都可以看到你的製作簽名算法可以自己簽名,你的服務器也會接受。