李錕:保證RESTful API的安全性主要包括三個方面:
a)驗證客戶的身份
b)加密敏感數據,防止篡改。
c)認證後的授權
認證客戶端有幾種常見的方法:
向請求添加簽名參數。
1.為每個訪問方分配壹個密鑰,並指定簽名計算方法。簽名參數必須被添加到訪問方的請求中。這種方法最簡單,但是要保證訪問密鑰的安全存儲,還要註意防止重放攻擊。其優點是易於理解和實現,缺點是需要承擔安全保管密鑰和定期更新的負擔,不夠靈活,密鑰更新和簽名算法升級困難。
使用標準的HTTP認證機制。
HTTP基本身份驗證安全性低,必須與HTTPS壹起使用。HTTP摘要式身份驗證可以單獨使用,並且具有中等程度的安全性。
HTTP摘要認證機制還支持插入用戶自定義的加密算法,可以進壹步提高API的安全性。然而,在面向互聯網的API中,插入自定義加密算法並沒有得到廣泛應用。
這種方式需要保證接入方“安全域-用戶名-密碼”三重信息的安全存儲,還要註意防止重放攻擊。
優點:基於標準,得到了廣泛的支持(大量的HTTP服務器端和客戶端庫)。服務器端HTTP認證的責任可以由Web Server(如Nginx)、App Server(如Tomcat)和安全框架(如Spring Security)承擔,對應用開發者透明。HTTP認證機制(RFC 2617)體現了“分離關註點”的設計原則,保持了操作語義的可見性。
2.缺點:這種基於簡單用戶名和密碼的機制安全性不可能高於基於非對稱密鑰(如數字證書)的機制。
使用OAuth協議進行身份驗證
OAuth協議適用於外部應用程序被授權訪問本站點資源的情況。與HTTP摘要認證相比,加密機制更加安全。需要註意的是,OAuth認證和HTTP摘要認證並不是相互替代的,它們的應用場景是不同的。OAuth協議更適合為面向終端用戶的API提供授權,比如獲取屬於用戶的微博信息等等。如果API不是面向終端用戶維度的,比如七牛雲存儲這樣的存儲服務,這就不是OAuth協議的典型應用場景。