RESTful API的安全性常用方法

保證RESTful API的安全性,主要包括三大方面:

a) 對客戶端做身份認證

b) 對敏感的數據做加密,並且防止篡改

對客戶端做身份認證,有幾種常見的做法:

在請求中加簽名參數

1.為每個接入方分配一個密鑰,並且規定一種簽名的計算方法。要求接入方的請求中必須加上簽名參數。這個做法是最簡單的,但是需要確保接入方密鑰的安全保存,另外還要注意防範replay攻擊。其優點是容易理解與實現,缺點是需要承擔安全保存密鑰和定期更新密鑰的負擔,而且不夠靈活,更新密鑰和升級簽名算法很困難。

使用標準的HTTP身份認證機制

HTTP Basic身份認證安全性較低,必須與HTTPS配合使用。HTTP Digest身份認證可以單獨使用,具備中等程度的安全性。

HTTP Digest身份認證機制還支持插入用戶自定義的加密算法,這樣可以進一步提高API的安全性。不過插入自定義加密算法在面向互聯網的API中用的不是很多。

這個做法需要確保接入方“安全域-用戶名-密碼”三元組信息的安全保存,另外還要注意防範replay攻擊。

優點:基於標準,得到了廣泛的支持(大量HTTP服務器端、客戶端庫)。在服務器端做HTTP身份認證的職責可以由Web Server(例如Nginx)、App Server(例如Tomcat)、安全框架(例如Spring Security)來承擔,對應用開發者來說是透明的。HTTP身份認證機制(RFC 2617)非常好地體現了“分離關注點”的設計原則,而且保持了操作語義的可見性。

2.缺點:這類基於簡單用戶名+密碼機制的安全性不可能高於基於非對稱密鑰的機制(例如數字證書)。

使用OAuth協議做身份認證

3.對敏感的數據做加密,並且防止篡改,常見的做法有:

部署SSL基礎設施(即HTTPS),敏感數據的傳輸全部基於SSL。

僅對部分敏感數據做加密(例如預付費卡的卡號+密碼),並加入某種隨機數作為加密鹽,以防範數據被篡改。

一個專注於為java工程師提供技術乾貨的文章平臺,使其從小牛歷練到大拿,在架構師的路上一路前行,共學習,共進步;

一個專注於為java工程師提供技術乾貨的文章平臺,使其從小牛歷練到大拿,在架構師的路上一路前行


分享到:


相關文章: